Фильтровать подчиненную форму на основе того, что введено в текстовое поле подчиненной формы. - PullRequest
1 голос
/ 14 октября 2010

Я пытаюсь отфильтровать записи, отображаемые в подчиненной форме, на основе того, что напечатано в текстовом поле подчиненной формы.Подформа называется «Пользователи» и находится в форме группы.В подчиненной форме Users есть текстовое поле с именем txtFilter.Если я наберу «W» в txtFilter, я хочу показать только записи, в которых lastName или userName пользователя начинаются с «W».Поскольку я продолжаю набирать W ... A ... L, я хочу, чтобы отображались только пользователи, чьи lastName или UserName начинаются с "Wal".

У меня есть смутное представление о том, что мне нужно использовать либо свойство набора записей, либоserverFilter подчиненной формы, чтобы сделать это, но я действительно в растерянности относительно того, что делать.Пожалуйста, помогите мне!

Ответы [ 2 ]

1 голос
/ 14 октября 2010
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
0 голосов
/ 13 февраля 2017

Быстрое обновление до ответа @dmr для Access 2013:

  • Измените "%" на "*" - 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
...