【问题标题】:VB6 ADODB Record Set UpdateVB6 ADODB 记录集更新
【发布时间】:2011-06-13 17:05:24
【问题描述】:

所以我对 Visual Basic 还是很陌生,并且继承了我现在需要处理的这个 VB6 代码。现在,我正在尝试使用 ADODB.RecordSet 更新 SQL 数据库。我有一个 Select SQL 语句,它将正确的数据从数据库中提取到 ADODB.RecordSet 中,但是我在更新所有行时遇到了问题。我想要做的是用相同的值更新每一行的同一列。现在,它正在更新一些记录,但我弹出一个错误。我得到的错误是:

运行时错误 3021:BOF 或 EOF 为 True 或当前记录已 删除。请求的操作需要 当前记录。

当我点击调试时,它会将我带到 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 还很陌生,我正在学习这一切。

【问题讨论】:

    标签: vb6 ado


    【解决方案1】:

    我猜问题是off-by-one 错误:

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

    如果记录计数返回 5,则此循环将使 6 次运行:0,1,2,3,4,5。

    我会这样写:

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

    【讨论】:

      【解决方案2】:

      也试试这个:

      If reUpdate.EOF Then 
          Exit Sub 
      End If
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多