Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 在键入时使用结果访问多字段搜索_Ms Access_Search_Vba - Fatal编程技术网

Ms access 在键入时使用结果访问多字段搜索

Ms access 在键入时使用结果访问多字段搜索,ms-access,search,vba,Ms Access,Search,Vba,大家早上好 我今天的问题是关于多字段搜索 我有一个拆分表单(顶部是字段和单个记录,底部是数据表视图中的所有数据)。我有多个字段要搜索,这样用户就可以根据许多条件找到特定的人 下面是一位同事帮助我使用的VBA,它现在运行得非常好,我想通过允许它搜索多个字段来为它添加更多的功能 Private Sub txtSearch_Change() Dim strFilter As String On Error Resume Next If Me.txtSearch.Text <

大家早上好

我今天的问题是关于多字段搜索

我有一个拆分表单(顶部是字段和单个记录,底部是数据表视图中的所有数据)。我有多个字段要搜索,这样用户就可以根据许多条件找到特定的人

下面是一位同事帮助我使用的VBA,它现在运行得非常好,我想通过允许它搜索多个字段来为它添加更多的功能

Private Sub txtSearch_Change()
    Dim strFilter As String
    On Error Resume Next
    If Me.txtSearch.Text <> "" Then
        strFilter = "[Last_Name] Like '*" & Me.txtSearch.Text & "*'"
        Me.Filter = strFilter
        Me.FilterOn = True
    Else
        Me.Filter = ""
        Me.FilterOn = False
    End If
    With Me.txtSearch
        .SetFocus
        .SelStart = Len(Me.txtSearch.Text)
    End With
End Sub
Private Sub txtSearch_Change()
作为字符串的Dim strFilter
出错时继续下一步
如果Me.txtSearch.Text为“”,则
strFilter=“[Last_Name]如“*”&Me.txtSearch.Text&“*”
Me.Filter=strFilter
Me.FilterOn=正确
其他的
Me.Filter=“”
Me.FilterOn=False
如果结束
和我一起。txtSearch
.SetFocus
.SelStart=Len(Me.txtSearch.Text)
以
端接头
每次我键入一封信,搜索都会重新查询并只提供符合该搜索条件的信息。我希望它做的是过滤,即使它是一个First_Name字段或SSN字段,等等。有人能提供我需要的代码位来让它工作吗?我一直在多个论坛、视频、帖子等中搜索,但由于我不断地抛出错误,似乎没有什么不同

为了使搜索能够跨越表单中的多个字段(假设有一个字段),我需要什么OR语句

*请注意,我希望在不使用搜索按钮的情况下执行此操作,因此我希望将其保留为Change()事件,而不是AfterUpdate()

谢谢大家!

编辑

对于标准回复注释,代码太长:

此代码挂起。我可能设置VBA错误

'This code works great, but if I put in a space character, it crashes the DB
Private Sub txtSearch_Change()
    Me.txtSearch.Text = Trim(Me.txtSearch.Text)
    Dim strFilter As String
    Dim sSearch As String

    If Me.txtSearch.Text <> "" Then
        sSearch = "'*" & Replace(Me.txtSearch.Text"'", "''") & "*'"
        strFilter2 = "[Last_Name] Like " & sSearch & " OR [First_Name] Like " & sSearch & " OR [SSN] Like " & sSearch
        Me.Filter = strFilter
        Me.FilterOn = True
    Else
        Me.Filter = ""
        Me.FilterOn = False
    End If
    With Me.txtSearch
        .SetFocus
        .SelLength = 0
        .SelStart = Len(Me.txtSearch.Text)
    End With
End Sub


'This code is what I have that will reset the textbox to blank and requery, giving me all the people in the DB
Private Sub txtSearch_Click()
    Me.txtSearch.Text = ""
    Me.Requery
    With Me.txtSearch
        .SetFocus
        .SelStart = Len(Me.txtSearch.Text)
    End With
End Sub
'这段代码非常有效,但如果我输入空格字符,它会使数据库崩溃
专用子txtSearch_Change()
Me.txtSearch.Text=修剪(Me.txtSearch.Text)
作为字符串的Dim strFilter
像线一样搜索
如果Me.txtSearch.Text为“”,则
sSearch=“”*”&Replace(Me.txtSearch.Text“,“”)&“*”
strFilter2=“[Last_Name]Like”&sSearch&“或[First_Name]Like”&sSearch&“或[SSN]Like”&sSearch
Me.Filter=strFilter
Me.FilterOn=正确
其他的
Me.Filter=“”
Me.FilterOn=False
如果结束
和我一起。txtSearch
.SetFocus
.SelLength=0
.SelStart=Len(Me.txtSearch.Text)
以
端接头
'这段代码就是我所拥有的,它会将文本框重置为空白并重新查询,给我数据库中的所有人
专用子txtSearch_Click()
Me.txtSearch.Text=“”
我,再询问
和我一起。txtSearch
.SetFocus
.SelStart=Len(Me.txtSearch.Text)
以
端接头

这是否会对我为什么会崩溃发出危险信号?

您只需更改strFilter的定义即可。为了方便起见,我将使用一个附加变量

Dim sSearch As String
If Me.txtSearch.Text <> "" Then
    ' Avoid problems with search strings containing "'"
    sSearch = "'*" & Replace(Me.txtSearch.Text, "'", "''") & "*'"
    ' Add all fields you want to search with OR
    strFilter = "[Last_Name] Like " & sSearch  & " OR [First_Name] Like " & sSearch ' etc.
Dim作为字符串搜索
如果Me.txtSearch.Text为“”,则
'避免包含“”的搜索字符串出现问题'
sSearch=“”*”&Replace(Me.txtSearch.Text)、“”、“”)&“*”
'添加要使用或搜索的所有字段
strFilter=“[Last_Name]Like”&sSearch&“或[First_Name]Like”&sSearch”等。

首先,文本框单击事件,当您单击文本框时,它会清除文本并重置搜索(无需重置按钮)

这是实际搜索,将搜索多个字段

Private Sub txtSearch_Change()
    Dim strFilter As String
    Dim sSearch As String
    On Error Resume Next

If Me.txtSearch.Text <> "" Then
    sSearch = "'*" & Replace(Me.txtSearch.Text, "'", "''") & "*'"
    strFilter = "[Last_Name] Like " & sSearch & " OR [First_Name] Like " & sSearch & " OR [SSN] Like " & sSearch
    Me.Filter = strFilter
    Me.FilterOn = True
Else
    Me.Filter = ""
    Me.FilterOn = False
End If

If Me.Recordset.RecordCount = 0 Then 'new line of code
    Me.Filter = "" 'new line of code
    Me.FilterOn = False 'new line of code
    Me.txtSearch.SetFocus 'new line of code
    Me.txtSearch.Text = "" 'new line of code
Exit Sub 'new line of code
End If 'new line of code

With Me.txtSearch
    .SetFocus
    .SelStart = Len(Me.txtSearch.Text)
End With
End Sub
Private Sub txtSearch_Change()
作为字符串的Dim strFilter
像线一样搜索
出错时继续下一步
如果Me.txtSearch.Text为“”,则
sSearch=“”*”&Replace(Me.txtSearch.Text)、“”、“”)&“*”
strFilter=“[Last_Name]Like”&sSearch&“或[First_Name]Like”&sSearch&“或[SSN]Like”&sSearch
Me.Filter=strFilter
Me.FilterOn=正确
其他的
Me.Filter=“”
Me.FilterOn=False
如果结束
如果Me.Recordset.RecordCount=0,则“新代码行”
Me.Filter=“”新代码行
Me.FilterOn=False'新代码行
Me.txtSearch.SetFocus'新代码行
Me.txtSearch.Text=“”新代码行
退出Sub“新代码行
如果“新代码行”结束
和我一起。txtSearch
.SetFocus
.SelStart=Len(Me.txtSearch.Text)
以
端接头

这很完美,但有一个问题!在搜索后键入空格时(例如:“Smith”,它会立即清空搜索,除关闭搜索表单并再次打开外,我所做的任何事情都不会恢复我的人员列表。是否有办法对此进行例外处理,以便在用户键入错误字符时不会使其崩溃,或者是否可以抛出一个消息框,清空搜索文本框并重新设置焦点?Or也许有更好的方法来处理这样的错误?嗯,我不明白为什么会发生这种情况。要调试这种情况,请在错误恢复下注释掉
。您可以使用
Me.txtSearch.Text=Trim(Me.txtSearch.Text)启动_changesub
——在我的sub中,除了设置
.SelStart
,我还设置了
.SelLength=0
,但我不确定这是否有什么不同。@willdutcher出于某种原因,我认为它一点也不喜欢。以下是我所有的相关代码:
code
,这将在用户每次单击时重置该行,并给出一个空白的f要使用的字段,并重新查询搜索以显示所有人员:Private Sub txtSearch_Click()Me.txtSearch.Text=”“Me.Requery with Me.txtSearch.SetFocus.SelStart=Len(Me.txtSearch.Text)以End Sub结束
code
code
'这是从顶部开始的代码。如果我搜索并输入a,如果我删除输入的文本,它将正确地重新查询,显示所有内容。
code
Private Sub txtSearch\u Change()将strFilter设置为字符串在错误时继续下一步如果Me.txtSearch.text“”,则strFilter='[姓氏]如“&Me.txtSearch.Text”
Private Sub txtSearch_Change()
    Dim strFilter As String
    Dim sSearch As String
    On Error Resume Next

If Me.txtSearch.Text <> "" Then
    sSearch = "'*" & Replace(Me.txtSearch.Text, "'", "''") & "*'"
    strFilter = "[Last_Name] Like " & sSearch & " OR [First_Name] Like " & sSearch & " OR [SSN] Like " & sSearch
    Me.Filter = strFilter
    Me.FilterOn = True
Else
    Me.Filter = ""
    Me.FilterOn = False
End If

If Me.Recordset.RecordCount = 0 Then 'new line of code
    Me.Filter = "" 'new line of code
    Me.FilterOn = False 'new line of code
    Me.txtSearch.SetFocus 'new line of code
    Me.txtSearch.Text = "" 'new line of code
Exit Sub 'new line of code
End If 'new line of code

With Me.txtSearch
    .SetFocus
    .SelStart = Len(Me.txtSearch.Text)
End With
End Sub