0

我正在尝试创建一个使用 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 使用,如果我在每个框中输入字母,我会收到语法错误(缺少运算符)。

我希望能够在一个或所有框中输入任何内容,单击搜索并查看匹配的条件。

4

1 回答 1

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
于 2017-03-08T23:20:01.503 回答