1

我正在尝试根据在子表单上的文本框中键入的内容来过滤子表单上显示的记录。子窗体称为用户,它位于组窗体上。在用户子窗体上有一个名为 txtFilter 的文本框。如果我在 txtFilter 中键入“W”,我只想显示用户的姓氏或用户名以“W”开头的记录。当我继续输入 W...A...LI 时,只希望显示 lastName 或 UserName 以“Wal”开头的用户。

我有一些模糊的想法,我必须使用记录集属性或子表单的 serverFilter 来执行此操作,但我真的不知道该怎么做。请帮我!

4

2 回答 2

1
Private Sub txtFilter_Change()

    If Nz(Me.txtFilter.Text, "") = "" Then
        Me.FilterOn = False
        Me.txtFilter.SetFocus
        Exit Sub
    End If
    Me.Filter = "lastName like '" + Me.txtFilter.Text + "%' or userName like '" & _
        Me.txtFilter.Text + "%'"
    Me.FilterOn = True
    Me.txtFilter.SetFocus
    Me.txtFilter.SelStart = Len(Nz(Me.txtFilter.Text, "")) + 1


End Sub
于 2010-10-14T18:30:27.817 回答
0

对 Access 2013 的 @dmr 响应的快速更新:

  • 将“%”更改为“*” - Access 使用星号作为通配符。除了之后,可能还想在文本之前添加它。
  • 您需要在表单属性中打开 AllowAdditions,否则当您的过滤器返回零命中时,您将遇到焦点错误。
  • 此代码将修剪空格,这使得您无法在搜索中添加空格(因为您不能在不先输入“两个”的情况下输入“两个单词”)。

修改后的回应:

Private Sub txtFilter_Change()

    Dim search_text As String
    search_text = Me.txtFilter

    If Nz(Me.txtFilter.Text, "") = "" Then
        Me.FilterOn = False
        Me.txtFilter.SetFocus
        Exit Sub
    End If
    Me.Filter = "lastName like '*" + Me.txtFilter.Text + "*' or userName like '*" & _
        Me.txtFilter.Text + "*'"
    Me.FilterOn = True
    Me.txtFilter.SetFocus
    Me.txtFilter.Value = search_text
    Me.txtFilter.SelStart = Len(Nz(Me.txtFilter.Text, "")) + 1


End Sub
于 2017-02-13T18:25:05.957 回答