2011-06-13 176 views
2

所以我對Visual Basic很新,並且繼承了現在需要處理的這個VB6代碼。現在,我正在嘗試使用ADODB.RecordSet更新SQL數據庫。我有一個Select SQL語句將正確的數據從數據庫中提取到ADODB.RecordSet中,但是在更新所有行時遇到問題。我想要做的是更新同一列的每一行具有相同的值。現在,它更新了一些記錄,但我得到一個錯誤彈出。我得到的錯誤是:VB6 ADODB記錄集更新

Run Time error 3021: Either BOF or EOF is True or the current record has been deleted. Requested operation requires a current record.

當我點擊調試,它需要我rsUpdate.fields(TargetFieldName)=值

項目本身是巨大的,過大後,但部分我正在處理的代碼是這樣的:

If rsUpdate.State = adStateOpen Then 
    If rsUpdate.EOF Then 
    rsUpdate.Close 
    Exit Function 
    End If 
rsUpdate.MoveFirst 
Dim i as Integer 
For i = 0 To rsUpdate.recordCount 
rsUpdate.fields(TargetFieldName) = value 
rsUpdate.MoveNext 
Next i 
On Error GoTo canupdaterecord 
rsUpdate.Update 
On Error GoTo 0 
rsUpdate.Close 
End If 
Exit function 

所以任何幫助你們可以給我將不勝感激。就像我說的,我對VB非常陌生,並且在我去的時候有點了解這一點。

回答

6

我想這個問題是一個off-by-one錯誤:

For i = 0 To rsUpdate.recordCount 
    rsUpdate.fields(TargetFieldName) = value  
    rsUpdate.MoveNext 
Next i 

如果總記錄返回,這個循環將使得運行:0,1,2,3,4,5。

我會寫這樣的:

while not rsUpdate.EOF do 
    rsUpdate.fields(TargetFieldName) = value  
    rsUpdate.MoveNext 
wend 
0

也試試這個:

If reUpdate.EOF Then 
    Exit Sub 
End If