【发布时间】:2014-12-17 14:38:02
【问题描述】:
因此,此代码旨在用作一个简单的搜索系统,以查找记录集中的某些记录。我最初拥有它,因此他们必须单击 btnGoToID 按钮才能执行搜索。我决定让它对用户更友好一点,并让它在搜索字段中监听 Enter 按钮,这也将执行搜索。
当代码到达strID = Trim(Nz(Me.txtSearch.Value, "")) 时,我遇到的问题将随机返回为空字符串,即使在视觉上我可以看到文本框中有一个值。
我无法缩小出现此问题的任何模式。在这一点上,我什至不知道如何解决这个问题,也不知道搜索的词可能会在谷歌中产生任何结果。我只能说,似乎在记录之间进行更改会影响搜索是否通过。
在我放入 txtSearch_KeyPress 子程序之前,这一直有效。
'============================================================================
' txtSearch_KeyPress
'============================================================================
Private Sub txtSearch_KeyPress(KeyAscii As Integer)
'If user pressed enter
If KeyAscii = 13 Then
Call btnGoToID_Click
End If
End Sub
'============================================================================
' btnGoToID_Click
'============================================================================
' <<Purpose>>
' Allow the user to search for a specific ID
'============================================================================
Private Sub btnGoToID_Click()
On Error GoTo Err_Handler
Dim rs As Recordset
Dim strID As String
Set rs = Me.RecordsetClone
strID = Trim(Nz(Me.txtSearch.Value, ""))
If (strID <> "") Then
'Go to the ID
rs.FindFirst "ID = '" & strID & "'"
If rs.NoMatch Then
MsgBox "ID does not exist"
Else
'If we have a match, set the record as the current record
Me.Bookmark = rs.Bookmark
End If
Else
MsgBox "Please enter a valid ID.", vbOKOnly, "Invalid ID"
End If
Exit_Handler:
On Error Resume Next
Me.txtSearch.Value = ""
rs.Close
Set rs = Nothing
Exit Sub
Err_Handler:
Call LogError(Err.Number, Err.Description, "txtSearch on " & Me.Name)
Resume Exit_Handler
End Sub
在 cmets 中的对话之后,我缩小了这个问题的范围,使其变得简单得多。即使在文本字段中有多个字符后,这也会产生“无效使用 null”错误消息。为什么会发生这种情况,我该怎么做才能让它获取文本框中的值?
'============================================================================
' txtUnitNoToSearch_KeyPress
'============================================================================
Private Sub txtUnitNoToSearch_KeyPress(KeyAscii As Integer)
MsgBox Me.txtUnitNoToSearch
End Sub
【问题讨论】:
-
我不确定错误可能是什么。但在我看来,您可以通过 textBox 的 _AfterUpdate 事件处理所有这些
-
只有在他们离开该字段时才会触发 AfterUpdate 事件,如果有的话(它是一个未绑定的字段)。你能扩展一下你的意思吗?
-
是的,但除非您已将字段定义为多行,否则我相信按
enter会导致相同的结果 -
我将它设置为多行仅是为了允许输入键被“捕获”。由于将其保留为默认值只会导致它消失。您是否正在考虑将其从多行更改,以便在按下回车键时将其移开,然后使用 OnUpdate 事件调用搜索?
-
你是对的。这取决于你想要什么。就我个人而言,我不认为这是糟糕的用户体验;你有一个过滤的文本字段,你输入 sth 然后它过滤。这似乎足够合理。 :) 但正如已经说过的,这取决于你想要什么:)
标签: ms-access vba ms-access-2010