我正在尝试创建一个使用3个文本框的过滤器(tbLastNameFilter,tbFirstNameFilter和tbCompanyFilter。我已成功设法让它与其中一个一起使用。但是,我不确定如何让它在其中工作与其他两个人一致。我尝试了几种方式。
Private Sub bttnSearch_Click()
Dim strFilter As String
If IsNull(Me.tbLastNameFilter & Me.tbFirstNameFilter & Me.tbCompanyFilter) Then
MsgBox ("No Search Information Entered")
Me.FilterOn = False
Else
strFilter = "LastName Like '*" & Replace(Me.tbLastNameFilter, "'", "''") & "*'"
Me.Filter = strFilter
Me.FilterOn = True
End If
我尝试将strFilter更改为
strFilter = "LastName Like '*" & Replace(Me.tbLastNameFilter, "'", "''") & "*'" & _
"FirstName Like '*" & Replace(Me.tbFirstNameFilter, "'", "''") & "*'" & _
"Company Like '*" & Replace(Me.tbCompanyFilter, "'", "''") & "*'"
如果我将任何一个框留空,我将无效使用null,如果我将字母放入每个,我会收到语法错误(缺少运算符)。
我希望能够在一个或所有框中输入任何内容,单击搜索并查看匹配的条件。
答案 0 :(得分:1)
您在查询中缺少AND
。但是,在将文本框添加到过滤器之前,还需要检查文本框是否为空。我建议用两个潜艇做这个。
第一个addToFilter
操纵控件并将其添加到过滤器(如果它不为空),并且仅在必要时添加AND
。这种方法简化了代码,因为它可以解决一些常见的字符串操作。
Sub addToFilter(ByRef sFilter As String, ctrl As Object, fieldName As String)
If IsNull(ctrl.Value) Then Exit Sub
If Len(Trim(ctrl.Value)) = 0 Then Exit Sub
If Len(sFilter) <> 0 Then sFilter = sFilter & " AND "
sFilter = sFilter & fieldName & " Like '*" & Replace(Trim(ctrl.Value), "'", "''") & "*'"
End Sub
Private Sub bttnSearch_Click()
Dim strFilter As String
addToFilter strFilter, Me.tbLastNameFilter, "LastName"
addToFilter strFilter, Me.tbFirstNameFilter, "FirstName"
addToFilter strFilter, Me.tbCompanyFilter, "Company"
If Len(strFilter) = 0 Then
MsgBox ("No Search Information Entered")
Me.FilterOn = False
Else
Me.filter = strFilter
Me.FilterOn = True
End If
End Sub