所以我对Visual Basic很新,并继承了我现在需要处理的VB6代码。现在,我正在尝试使用ADODB.RecordSet更新SQL数据库。我有一个Select SQL语句,它将数据库中的正确数据提取到ADODB.RecordSet中,但是我在更新所有行时遇到了问题。我想要做的是为每行更新相同的列具有相同的值。现在,它更新了一些记录,但是我弹出一个错误。我得到的错误是:
运行时错误3021:BOF或EOF 是真或当前的记录 删除。请求的操作需要 目前的记录。
当我点击调试时,它需要我rsUpdate.fields(TargetFieldName)= value
项目本身庞大而且太大而无法发布,但我现在正在处理的部分代码是:
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很陌生,并且在我去的时候就是这样学习的。
答案 0 :(得分:6)
我猜这个问题是off-by-one错误:
For i = 0 To rsUpdate.recordCount
rsUpdate.fields(TargetFieldName) = value
rsUpdate.MoveNext
Next i
如果recordcount返回 5 ,此循环将使 6 运行:0,1,2,3,4,5。
我会这样写:
while not rsUpdate.EOF do
rsUpdate.fields(TargetFieldName) = value
rsUpdate.MoveNext
wend
答案 1 :(得分:0)
也可以尝试:
If reUpdate.EOF Then
Exit Sub
End If