Многократный фильтр для Subfom в MS Access - PullRequest
1 голос
/ 28 марта 2019

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

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

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

Private Sub Filtermainform()
    Dim strWhere As String

    'Make string
    If Nz(Me.Combo56, "") <> "" Then
        If IsNumeric(Me.Combo56) Then
        strWhere = strWhere & "[" & Me.Combo54 & "] = " & Me.Combo56 & " AND "
        Else
        strWhere = strWhere & "[" & Me.Combo54 & "] = '" & Me.Combo56 & "' AND "
        End If
    End If
    If Nz(Me.Combo109, "") <> "" Then
        If IsNumeric(Me.Combo109) Then
        strWhere = strWhere & "[" & Me.Combo107 & "] = " & Me.Combo109 & " AND "
        Else
        strWhere = strWhere & "[" & Me.Combo107 & "] = '" & Me.Combo109 & "' AND "
        End If
    End If
    If Nz(Me.Combo112, "") <> "" Then
        If IsNumeric(Me.Combo112) Then
        strWhere = strWhere & "[" & Me.Combo111 & "] = " & Me.Combo112 & " AND "
        Else
        strWhere = strWhere & "[" & Me.Combo111 & "] = '" & Me.Combo112 & "' AND "
        End If
    End If
    If Nz(Me.Combo114, "") <> "" Then
        If IsNumeric(Me.Combo114) Then
        strWhere = strWhere & "[" & Me.Combo113 & "] = " & Me.Combo114 & " AND "
        Else
        strWhere = strWhere & "[" & Me.Combo113 & "] = '" & Me.Combo114 & "' AND "
        End If
    End If
    If Nz(Me.Combo116, "") <> "" Then
        If IsNumeric(Me.Combo116) Then
        strWhere = strWhere & "[" & Me.Combo115 & "] = " & Me.Combo116 & " AND "
        Else
        strWhere = strWhere & "[" & Me.Combo115 & "] = '" & Me.Combo116 & "' AND "
        End If
    End If
    If Nz(Me.Combo118, "") <> "" Then
        If IsNumeric(Me.Combo118) Then
        strWhere = strWhere & "[" & Me.Combo117 & "] = " & Me.Combo118 & " AND "
        Else
        strWhere = strWhere & "[" & Me.Combo117 & "] = '" & Me.Combo118 & "' AND "
        End If
    End If
    If Nz(Me.Combo120, "") <> "" Then
        If IsNumeric(Me.Combo120) Then
        strWhere = strWhere & "[" & Me.Combo119 & "] = " & Me.Combo120 & " AND "
        Else
        strWhere = strWhere & "[" & Me.Combo119 & "] = '" & Me.Combo120 & "' AND "
        End If
    End If
    If Nz(Me.Combo122, "") <> "" Then
        If IsNumeric(Me.Combo122) Then
        strWhere = strWhere & "[" & Me.Combo121 & "] = " & Me.Combo122 & " AND "
        Else
        strWhere = strWhere & "[" & Me.Combo121 & "] = '" & Me.Combo122 & "' AND "
        End If
    End If
    If Nz(Me.Combo124, "") <> "" Then
        If IsNumeric(Me.Combo124) Then
        strWhere = strWhere & "[" & Me.Combo123 & "] = " & Me.Combo124 & " AND "
        Else
        strWhere = strWhere & "[" & Me.Combo123 & "] = '" & Me.Combo124 & "' 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 Ответ

1 голос
/ 28 марта 2019

Вы можете иметь несколько полей в спецификации MasterField и ChildField, например:

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

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

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