vba - 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' 的位置。
有人可以帮我解释为什么会发生这种情况吗?
解决方案
尝试跳过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
推荐阅读
- jquery - 如何在 jquery 中单击 id 获取子属性值?
- azure - 将全局自定义遥测初始化程序添加到 Azure Function App 中的 Application Insights
- opencart - 谷歌搜索控制台中的购物车页面出现软 404 错误
- android - 如何解析包含没有名称的数组的 JSON 对象
- arrays - 将 tableView 中的项目与选定项目进行比较
- javascript - 如何处理 JSON 树?
- opendaylight - Opendaylight 序列化空值问题
- mongodb - Azure 数据工厂 - 复制活动 Json 数组
- python - 为 Python Azure 函数应用导入其他文件时出现 HTTP 错误 500
- android - 无法从 Java 代码调用 Kotlin 协程代码