简体   繁体   中英

How can I apply multiple Filters on my Subform on MS Access?

I try to make a Filter system for a Subform in Access.

How can I connect multiple Filters on one Subform. The Filters were made with SQL but in 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

This is how I am doing it (function copied from my current project but you can easily see how each field is examined to see if it needs to be added to the filter code or not):

Private Function 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

Where f_FieldName are controls to manage the allowable filters. Then just call this private function from every event that changes the filter.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM