为什么Access搜索字段有时会返回表中的第一个条目



我正在维护一个Access DB(客户端使用Access 2016,64位(,有时用户会报告说,当他们搜索记录时,搜索会返回表中的第一条记录,而不是搜索到的记录。

数据库是分开的,在任何给定的时间都有大约20多个用户。后端存储在文件服务器上,每次用户通过GPO登录时,前端都会复制到他们的桌面上。有些用户是远程用户,有些在办公室连接到本地以太网。这个问题似乎只影响一个用户,无论他们是远程用户还是办公室用户。

搜索字段(未绑定的组合框(的代码如下,通常用户会搜索记录,并从组合框中选择它以以下形式打开:

Private Sub cmbGoToRecord_AfterUpdate()

If Me.Dirty = True Then
If CheckForCompleteness = False Then Exit Sub
End If

Me.cmbGoToRecordCustomerName = ""

Dim rs As Object

Me.Detail.Visible = False

Set rs = Me.Recordset.Clone

If Len(Me.cmbGoToRecord & vbNullString) > 0 Then
rs.FindFirst "[CustomerID] = " & Me.cmbGoToRecord
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End If

If Len(Me.cmbGoToRecord & vbNullString) = 0 Then
Set rs = Nothing
Exit Sub
End If

Set rs = Nothing

Me.Detail.Visible = True

End Sub

CheckForCompleteness是一个检查是否填写了某些字段的功能,如果不是,则会弹出一个消息框,指示用户填写这些字段,用户在完成记录之前无法保存或浏览该记录。

之所以实现Me.Detail.Visible更改,是因为用户想要一个可见的线索来指示正在发生的事情。

有两个搜索字段(一个用于名称,另一个用于客户ID(,我将另一个字段留空。该搜索字段的代码与上面相同,只是组合框名称不同。

我无法在客户端系统上复制此问题,也无法在我们的内部测试环境中复制此问题。我怀疑是网络问题,但我没有办法在客户的位置进行测试。

有人对这个问题的原因有什么建议吗?

尝试使用.NoMatch:

Private Sub cmbGoToRecord_AfterUpdate()

If Me.Dirty = True Then
If CheckForCompleteness = False Then Exit Sub
End If

Me.cmbGoToRecordCustomerName = ""

Dim rs As DAO.Recordset

Me.Detail.Visible = False

Set rs = Me.RecordsetClone

If Len(Me.cmbGoToRecord & vbNullString) > 0 Then
rs.FindFirst "[CustomerID] = " & Me.cmbGoToRecord
If Not rs.NoMatch Then
Me.Bookmark = rs.Bookmark
End If
End If
rs.Close
Set rs = Nothing

Me.Detail.Visible = True

End Sub

最新更新