根据子窗体上文本框中键入的内容过滤子窗体

时间:2010-10-14 15:58:47

标签: forms filtering ms-access-2003 subform adp

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

我有一些模糊的想法,我必须使用记录集属性或子窗体的serverFilter来做到这一点,但我真的不知道该怎么做。请帮帮我!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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