2014-08-29 206 views
1

我想要做的是通過SQL查詢從在線服務器獲取一些數據,然後循環修改記錄的記錄集。在ADODB記錄集中編輯記錄

我得到試圖修改記錄時出現錯誤:「多步驟操作錯誤檢查每個狀態值。」

我的問題是:有沒有辦法從我從查詢中獲得的記錄集修改記錄?

在這種情況下,如果字段1符合特定條件,我將修改字段2。 (在這種情況下,字段2是一個字符串)

下面是簡化的代碼:

Dim adoConn As ADODB.Connection 
Dim locRS As New ADODB.Recordset, proRS As ADODB.Recordset 
Dim strConnection As String 

Set getSQL = New ADODB.Recordset 


'Set Objects 
Set adoConn = New ADODB.Connection 

'Specify connection string 
strConnection = "User ID=xxx; Password=xxx;Data Source=xxx;Provider=OraOLEDB.Oracle" 

'Open the connection 
adoConn.Open (strConnection) 

'Set up recordset properties 
getSQL.CursorType = adOpenStatic 
getSQL.CursorLocation = adUseClient 
getSQL.LockType = adLockBatchOptimistic 

'Import the data 
getSQL.Open "SELECT FIELD1, FIELD2 FROM TABLE", adoConn, adOpenStatic, adLockOptimistic 
Set getSQL.ActiveConnection = Nothing 
getSql.Update 


'Loop through data 
getSQL.MoveFirst 
Do While Not stockRS.EOF 
'If cetrain condition is met then modify the null column 
if getSQL!FIELD1=CRITERIA then 
'Error here 
getSQL!FIELD2="SOME STRING" 
End If 
getSQL.MoveNext 
Loop 

'Close 
adoConn.Close 
Set adoConn = Nothing 

回答

0

你的SQL是不是做你認爲: SELECT ...空結果......是要回在名爲OUTCOME的字段中的值爲NULL,但不會鏈接到名爲OUTCOME的表中的字段(我認爲您正在查找),因爲您當前的語法是設置ALIAS而不選擇該字段。我假設在表上存在字段OUTCOME。如果沒有,您需要先創建它,或者在寫入任何內容之前先執行一個alter table來添加該字段。 我建議先創建字段(我認爲你已經完成了)。但請確保默認值爲NULL,因此您不需要在select中執行NULL操作,請確保允許該字段取NULL值,否則您將看到錯誤。選擇變爲:

getSQL.Open "SELECT FIELD1, FIELD2, OUTCOME FROM TABLE", adoConn, adOpenStatic, adLockOptimistic 

然後在功能管理NULL值如下:

if getSQL!FIELD1=CRITERIA then 
'Error here 
    getSQL!OUTCOME="SOME STRING" 
ELSE 
    getSQL!OUTCOME=NULL 
End If 

這確保你總是寫些東西來觀察字段,以便處理和結果沒有得到同步的。

而且我還認爲你已經離婚了從服務器記錄數據時,你:

Set getSQL.ActiveConnection = Nothing 

這樣做是爲了釋放資源,您在完成後。 您可能還需要一個

getSql.Update 

更改提交他們回到數據庫之後。

+0

仍然沒有。甚至試圖深度複製記錄集([鏈接](http://stackoverflow.com/questions/25553594/deep-copy-or-clone-an-adodb-recordset-in-vba))。但仍然沒有。它不是一個場屬性? – 2014-08-29 12:20:25

+0

我發現了另一個問題 - 請參閱更新的答案。 – nempnett 2014-09-02 08:52:34

+0

如果仍然無法正常工作,您可以發佈包含我所有建議的最新版本代碼,以便我們再看一次。 – nempnett 2014-09-04 09:18:03