首页 > 解决方案 > Recordset.find bof 和 eof 都是假的,即使没有记录存在

问题描述

我正在尝试使用 ADODB recordset.find 方法来检查记录是否存在,如果不存在则添加它,如果存在则执行其他操作。我简化了我当前的代码,但它看起来像这样:

     Do While Not (myValue < 4000)
            If Not (rstLocalItems.BOF) Then
                rstLocalItems.MoveFirst
            End If
            rstLocalItems.Find "ItemNo='" & myVal & "'"
            If rstLocalItems.EOF = True or rstLocalItems.BOF = True  Then


            Else

            'This value already exists do other stuff
             
             End if
             myValue = myValue + 1
Loop

当未找到该值时,我将该值插入到我现在完全清除的本地表中,这意味着不应找到任何值。例如,当循环位于时35,我可以在表中看到 1-34 的所有值。但是当它为 35 时,它表示 EOF 和 BOF 都是错误的。我在表中搜索 35,该表只有 34 之前的值,所以 EOF 应该返回 true。

此外,当我打印 rstLocalItems("myVal") 的值时,当我的调试器在线时,它显示为 34:

If rstLocalItems.EOF = True or rstLocalItems.BOF = True  Then

这有点奇怪,因为它至少应该说 1,因为rstLocalItems.MoveFirst当我单步执行代码时,它会在上面一行之前触发。

出于某种原因,当我将记录集设置为 movefirst 并搜索 35 时。代码认为 '34' 等于 '35' 并将光标移动到包含值 '34' 的位置。

有人可以帮我解释为什么会发生这种情况吗?

标签: vbams-access

解决方案


尝试跳过BOF检查。此外,ItemNo可能不是text

Do While myValue < 4000
    rstLocalItems.MoveFirst
    rstLocalItems.Find "ItemNo = " & myVal & ""
    If rstLocalItems.EOF = True Then
        ' No match.
    Else
        ' This value already exists do other stuff
    End if
    myValue = myValue + 1
Loop

推荐阅读