Как я могу применить несколько фильтров к моей подчиненной в MS Access? - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь создать систему фильтров для подчиненной формы в Access.

Как я могу подключить несколько фильтров к одной субформе. Фильтры были сделаны с SQL, но в VBA.

If Me.cboLieferant = "*" Then
SQL = "SELECT Lieferant.LieferantenName, Einkaeufer.Name, Vertrag.VertragsNr, Vertrag.VertragsTitel, Projekt.ProjektName, Vertrag.[1Kuendigungsmoeglichkeit], KraftStatus.Name, Vertrag.Gesamtbetrag " _
    & " FROM KraftStatus INNER JOIN (Projekt INNER JOIN ((EinkauferVertrag INNER JOIN ((LieferantVertrag INNER JOIN Vertrag ON LieferantVertrag.VertragId = Vertrag.ID) INNER JOIN Lieferant ON LieferantVertrag.LiferantId = Lieferant.ID) ON EinkauferVertrag.VertragId = Vertrag.ID) INNER JOIN Einkaeufer ON EinkauferVertrag.EinkauferId = Einkaeufer.ID) ON Projekt.ID = Vertrag.ProjektId) ON KraftStatus.ID = Vertrag.KraftStatusID"
Else
    SQL = "SELECT Lieferant.LieferantenName, Einkaeufer.Name, Vertrag.VertragsNr, Vertrag.VertragsTitel, Projekt.ProjektName, Vertrag.[1Kuendigungsmoeglichkeit], KraftStatus.Name, Vertrag.Gesamtbetrag " _
    & " FROM KraftStatus INNER JOIN (Projekt INNER JOIN ((EinkauferVertrag INNER JOIN ((LieferantVertrag INNER JOIN Vertrag ON LieferantVertrag.VertragId = Vertrag.ID) INNER JOIN Lieferant ON LieferantVertrag.LiferantId = Lieferant.ID) ON EinkauferVertrag.VertragId = Vertrag.ID) INNER JOIN Einkaeufer ON EinkauferVertrag.EinkauferId = Einkaeufer.ID) ON Projekt.ID = Vertrag.ProjektId) ON KraftStatus.ID = Vertrag.KraftStatusID" _
    & " WHERE [Lieferant].[ID] = " & Nz(Me.cboLieferant, 0) & ";"
End If

Me.uFiltering.Form.RecordSource = SQL
Me.uFiltering.Form.Requery

1 Ответ

0 голосов
/ 10 января 2019

Вот как я это делаю (функция скопирована из моего текущего проекта, но вы можете легко увидеть, как проверяется каждое поле, чтобы увидеть, нужно ли его добавлять в код фильтра или нет):

Частная функция UpdateFilter () As Boolean

Dim Filter As String: Filter = ""
If Trim(Nz(Me.f_Name)) <> "" Then Filter = Filter & "HotelName LIKE '" & Qs(Replace(Me.f_Name, "_", " ")) & "*' AND "
If Not IsNull(Me.f_Location) Then Filter = Filter & "EventLocationID=" & Me.f_Location & " AND "
If Not IsNull(Me.f_HasEvent) Then Filter = Filter & "HasEvent=" & IIf(Me.f_HasEvent, "True", "False") & " AND "
If Filter <> "" Then
    Me.Filter = Left(Filter, Len(Filter) - 5)
    Me.FilterOn = True
  Else
    Me.FilterOn = False
  End If

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

...