即使没有找到匹配项,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,它应该跳转到该记录(如果存在),或者如果它不存在,则留在当前记录.

我试图通过将一个隐藏的文本框绑定到“Doc​​Num”并在其顶部有一个未绑定的可见框来实现这一点。在 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 记录集也会继续搜索?的主要内容,如果未能解决你的问题,请参考以下文章

MS Access UPSERT(更新/插入)SQL [重复]

Ms Access 比较两个记录集

如何批量检查 MS-Access 中的重复项并记录更改?

MS Access 查询返回的记录不足,但仅限于某些约束

C# 和 MS Access 之间的数据类型不匹配?

将唯一记录插入 MS access 2007