Hallo,
mit dem nachfolgenden Code möchte ich in einem Formular in 4 Spalten filtern.
Ich filtere über 4 ComboBoxen jeweils mit ID
Die ComboBoxen können einen Filterwunsch enthalten oder leer sein.
Das macht die Sache für mich sehr komplex.
Deswegen habe ich den Ansatz gewählt, 4 einzelne Filterentscheidungen zu treffen und diese am Ende des Codes zusammenzufassen. Und dann erst den Gesamtfilter zu aktivieren.
Die Filterung der einzelnen Spalten scheint zu gelingen. Mit oder ohne Auswahl in der ComboBox.
Die Zusammenfassung gelingt nicht.
Grundsätzliche Frage: ist eine derartige Vorgehensweise möglich?
Falls ja...wie müsste der SQL-Befehl für die Zusammenfassung lauten?
Private Sub cbxProjekt_AfterUpdate()
'+++Funktionierender Filter für 1nen Filter in 1ner Spalte - auch mit leerer ComnboBox+++
'Filterung Aller 4 Filter in den 4 Spalten funktioniert nicht
Dim sqlFilterProjekt As String
Dim sqlFilterHG As String
Dim sqlFilterG As String
Dim sqlFilterUG As String
Forms!ArchivQ_ListeF.RecordSource = "ArchivQ_Select"
'Erster Filter auf ProjektT-ID
If Me.cbxProjekt <> "" Then
sqlFilterProjekt = "[ProjektT_ID] = Forms!ArchivQ_ListeF.cbxProjekt"
Else
sqlFilterProjekt = "[ProjektT_ID] Like '*'"
End If
' Me.Filter = sqlFilterProjekt
' Me.FilterOn = True
'Zweiter Filter auf HGT_ID
If Me.cbxHG <> "" Then
sqlFilterHG = "[HGT_ID] = Forms!ArchivQ_ListeF.cbxHG"
Else
sqlFilterHG = "[HGT_ID] Like '*'"
End If
' Me.FilterOn = True
'Dritter Filter auf GT_ID
If Me.cbxG <> "" Then
sqlFilterG = "[GT_ID] = Forms!ArchivQ_ListeF.cbxG"
Else
sqlFilterG = "[GT_ID] Like '*'"
End If
' Me.FilterOn = True
'Vierter Filter auf UGT_ID
If Me.cbxUG <> "" Then
sqlFilterUG = "[UGT_ID] = Forms!ArchivQ_ListeF.cbxUG"
Else
sqlFilterUG = "[UGT_ID] Like '*'"
End If
' Me.FilterOn = True
'Zusammenfassung aller 4 Einzelfilter:
'Der Ablauf bei der Findung der 4 Einzelfilter scheint zu funktionieren
'Die Zusammenfassung gelingt nicht
'Ist ein derartiger Ablauf überhaupt möglich? Falls ja...wie müsste der SQL-Befehl für die Zusammenfassung aussehen?
Me.Filter = sqlFilterProjekt And sqlFilterHG And sqlFilterG And sqlFilterUG
Me.FilterOn = True
Me.Requery 'Wird benötigt, weil ich noch zusätzlich über eine Abfrage filtere
End Sub
Vielen Dank für die Hilfe und
schöne Grüße aus Lüneburg
Harry
Hallo,
etwa so:
Me.Filter = sqlFilterProjekt & " And " & sqlFilterHG & " And " & sqlFilterG & " And " & sqlFilterUG
wobei das Ganze auch so geschrieben werden könnte (vorausgesetzt, die ID-Felder weisen den Datentyp LONG auf):
.
.
.
Dim strKrit as String
If Not IsNull (Me!cbxProjekt) Then strKrit = strKrit & " And [ProjektT_ID] = " & Me!cbxProjekt
If Not IsNull(Me!cbxHG) Then strKrit = strKrit & " And [HGT_ID] = " & Me!cbxHG
If Not IsNull(Me!cbxG) Then strKrit = strKrit & " And [GT_ID] = " & Me!cbxG
If Not IsNull(Me!cbxUG) Then trKrit = strKrit & " And [UGT_ID] = " & Me!cbxUG
If Len(strKrit) Then
strKrit = Mid(strKrit,5)
Me.Filter = strKrit
Me.FilterOn = True
End If
.
.
.
Vielen Dank für die Hilfe Franz,
auch für die Alternative.
Der Code funktioniert ausgezeichnet!
Nachdem jetzt in VBA alles schön strukturiert ist, habe ich bis auf einen Filter alle in der Abfrage gelöscht und in VBA mit diesem Schema aufgebaut.
Einfach und übersichtlich.
Der letzte Filter, der noch in der Abfrage bleibt, greift auf ein Kombinationsfeld, in dem ich die Inhalte ALLER anderen Felder mit & zusammenfasse. In diesem Feld kann ich dann über alle Felder/Inhalte der gesamten Archiv-Datei suchen!
Grüße aus Lüneburg
Harry