即使没有找到匹配项,MS Access 记录集也会继续搜索?
Posted
技术标签:
【中文标题】即使没有找到匹配项,MS Access 记录集也会继续搜索?【英文标题】:MS Access Recordset Moving on Search even if no match found? 【发布时间】:2021-12-05 16:50:48 【问题描述】:这让我发疯了。我有一个访问 VBA 表单,我希望允许用户在框中键入文档编号,以便直接跳转到该记录。
基础表作为字段“DocNum”,并且编号始终是连续的。我希望搜索框显示用户当前所在的文档编号,如果他们输入不同的数字并按 Enter,它应该跳转到该记录(如果存在),或者如果它不存在,则留在当前记录.
我试图通过将一个隐藏的文本框绑定到“DocNum”并在其顶部有一个未绑定的可见框来实现这一点。在 Form_Current() 上,未绑定的框与基础字段匹配。之后,更新我运行以下代码来执行搜索。
Private Sub txt_DocNumSearch_AfterUpdate()
Dim rs As Object
Set rs = Me.RecordsetClone
With rs
rs.FindFirst "[DocNum] = " & Str(Me![txt_DocNumSearch])
If rs.NoMatch Then
MsgBox "Record not found."
GoTo Cleanup
Else
Me.Bookmark = rs.Bookmark
Exit Sub
End If
End With
Cleanup:
rs.Close
Set rs = Nothing
Set dbs = Nothing
End Sub
让我发疯的是,即使它没有找到匹配项......它还是会跳到下一条记录。无论我做什么......最后移动,在我搜索之前尝试添加书签,等等......我无法让它不向前跳跃。我错过了什么?
【问题讨论】:
这是一个有点奇怪的用户界面。通常,您将搜索框放在数据部分之外,例如搜索框在表格标题中,数据在详细信息部分(单个或连续形式)。然后你的代码就可以正常工作了(你仍然应该使用 Gustav 的版本)。 【参考方案1】:尝试简化它:
Private Sub txt_DocNumSearch_AfterUpdate()
Dim rs As DAO.Recordset
Set rs = Me.RecordsetClone
With rs
.FindFirst "[DocNum] = " & Str(Me![txt_DocNumSearch])
If .NoMatch Then
MsgBox "Record not found."
Else
Me.Bookmark = .Bookmark
End If
.Close
End With
End Sub
【讨论】:
刚试过,但同样的问题。 那么您的键类型只会导致移动到下一条记录,而不是代码。将表单的属性设置为仅在按 Enter 时遍历一条记录中的字段。 哈哈,我自己刚刚得出这个结论,一个单独的数据库(我做了同样的方法)没有这个问题。控制它的属性是什么?我不记得将它设置为任何不寻常的东西。 是Form、Properties、Other、第三项。以上是关于即使没有找到匹配项,MS Access 记录集也会继续搜索?的主要内容,如果未能解决你的问题,请参考以下文章