Множественный фильтр для вложенных файлов в MS Access

#ms-access #vba

#ms-access #vba

Вопрос:

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

Как я могу применить те же фильтры в моей подчиненной форме к тому, что у меня есть в моей основной форме?

Ниже приведен мой код, который поможет вам понять:

 Private Sub Filtermainform()
    Dim strWhere As String

    'Make string
    If Nz(Me.Combo56, "") <> "" Then
        If IsNumeric(Me.Combo56) Then
        strWhere = strWhere amp; "[" amp; Me.Combo54 amp; "] = " amp; Me.Combo56 amp; " AND "
        Else
        strWhere = strWhere amp; "[" amp; Me.Combo54 amp; "] = '" amp; Me.Combo56 amp; "' AND "
        End If
    End If
    If Nz(Me.Combo109, "") <> "" Then
        If IsNumeric(Me.Combo109) Then
        strWhere = strWhere amp; "[" amp; Me.Combo107 amp; "] = " amp; Me.Combo109 amp; " AND "
        Else
        strWhere = strWhere amp; "[" amp; Me.Combo107 amp; "] = '" amp; Me.Combo109 amp; "' AND "
        End If
    End If
    If Nz(Me.Combo112, "") <> "" Then
        If IsNumeric(Me.Combo112) Then
        strWhere = strWhere amp; "[" amp; Me.Combo111 amp; "] = " amp; Me.Combo112 amp; " AND "
        Else
        strWhere = strWhere amp; "[" amp; Me.Combo111 amp; "] = '" amp; Me.Combo112 amp; "' AND "
        End If
    End If
    If Nz(Me.Combo114, "") <> "" Then
        If IsNumeric(Me.Combo114) Then
        strWhere = strWhere amp; "[" amp; Me.Combo113 amp; "] = " amp; Me.Combo114 amp; " AND "
        Else
        strWhere = strWhere amp; "[" amp; Me.Combo113 amp; "] = '" amp; Me.Combo114 amp; "' AND "
        End If
    End If
    If Nz(Me.Combo116, "") <> "" Then
        If IsNumeric(Me.Combo116) Then
        strWhere = strWhere amp; "[" amp; Me.Combo115 amp; "] = " amp; Me.Combo116 amp; " AND "
        Else
        strWhere = strWhere amp; "[" amp; Me.Combo115 amp; "] = '" amp; Me.Combo116 amp; "' AND "
        End If
    End If
    If Nz(Me.Combo118, "") <> "" Then
        If IsNumeric(Me.Combo118) Then
        strWhere = strWhere amp; "[" amp; Me.Combo117 amp; "] = " amp; Me.Combo118 amp; " AND "
        Else
        strWhere = strWhere amp; "[" amp; Me.Combo117 amp; "] = '" amp; Me.Combo118 amp; "' AND "
        End If
    End If
    If Nz(Me.Combo120, "") <> "" Then
        If IsNumeric(Me.Combo120) Then
        strWhere = strWhere amp; "[" amp; Me.Combo119 amp; "] = " amp; Me.Combo120 amp; " AND "
        Else
        strWhere = strWhere amp; "[" amp; Me.Combo119 amp; "] = '" amp; Me.Combo120 amp; "' AND "
        End If
    End If
    If Nz(Me.Combo122, "") <> "" Then
        If IsNumeric(Me.Combo122) Then
        strWhere = strWhere amp; "[" amp; Me.Combo121 amp; "] = " amp; Me.Combo122 amp; " AND "
        Else
        strWhere = strWhere amp; "[" amp; Me.Combo121 amp; "] = '" amp; Me.Combo122 amp; "' AND "
        End If
    End If
    If Nz(Me.Combo124, "") <> "" Then
        If IsNumeric(Me.Combo124) Then
        strWhere = strWhere amp; "[" amp; Me.Combo123 amp; "] = " amp; Me.Combo124 amp; " AND "
        Else
        strWhere = strWhere amp; "[" amp; Me.Combo123 amp; "] = '" amp; Me.Combo124 amp; "' AND "
        End If
    End If

    'Apply filter
    If strWhere <> "" Then
        strWhere = Left(strWhere, Len(strWhere) - 5) 'Remove the extra AND
        Me.Filter = strWhere
        Me.FilterOn = True
    Else
        Me.Filter = ""
        Me.FilterOn = False
    End If
  

Ответ №1:

В спецификации основного поля и дочернего поля может быть несколько полей, например:

 [Id];[FilterField]
[FK];[FilterField]
  

Чтобы удалить фильтр, удвойте первое поле, поскольку вы не можете изменить ни одну из спецификаций, чтобы количество полей было другим, чем в другой (!), таким образом:

 [Id];[Id]
[FK];[FK]