Forms 根据在子窗体的文本框中键入的内容筛选子窗体

Forms 根据在子窗体的文本框中键入的内容筛选子窗体,forms,filtering,ms-access-2003,subform,adp,Forms,Filtering,Ms Access 2003,Subform,Adp,我试图根据子窗体上文本框中键入的内容筛选子窗体上显示的记录。子窗体称为用户,它位于组窗体上。在用户子窗体上有一个名为txtFilter的文本框。如果我在txtFilter中键入“W”,我只想显示用户的姓氏或用户名以“W”开头的记录。当我继续键入W…A…L时,我只希望显示姓氏或用户名以“Wal”开头的用户 我有一些模糊的想法,我必须使用recordset属性或子表单的serverFilter来完成这项工作,但我真的不知道该怎么做。请帮帮我 Access 2013的@dmr响应快速更新: Priva

我试图根据子窗体上文本框中键入的内容筛选子窗体上显示的记录。子窗体称为用户,它位于组窗体上。在用户子窗体上有一个名为txtFilter的文本框。如果我在txtFilter中键入“W”,我只想显示用户的姓氏或用户名以“W”开头的记录。当我继续键入W…A…L时,我只希望显示姓氏或用户名以“Wal”开头的用户


我有一些模糊的想法,我必须使用recordset属性或子表单的serverFilter来完成这项工作,但我真的不知道该怎么做。请帮帮我

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

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
  • 将“%”更改为“*”-Access使用星号表示通配符。可能要将其添加到文本之前,以及之后
  • 您可能希望在表单属性中启用AllowAdditions,否则当过滤器返回零命中率时会出现焦点错误
  • 这段代码将删除空格,这使得您无法在搜索中添加空格(因为您不能在不首先键入“two”的情况下键入“two words”)
修改后的答复:

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

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

  • 将“%”更改为“*”-Access使用星号表示通配符。可能要将其添加到文本之前,以及之后
  • 您可能希望在表单属性中启用AllowAdditions,否则当过滤器返回零命中率时会出现焦点错误
  • 这段代码将删除空格,这使得您无法在搜索中添加空格(因为您不能在不首先键入“two”的情况下键入“two words”)
修改后的答复:

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