#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]