2011-06-13 152 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