Hi zusammen,
ich baue gerade eine Abfrage, die eine Tabelle nach einem oder mehr Kriterien in der Spalte "Bereich" filtern soll.
Dazu habe ich eine Funktion gebaut die einen entsprechenden String mit "oder" zusammenbaut.
Function GetFilter(UserLogin As String)
Dim rs As DAO.Recordset
Dim strfilter As String
Set rs = CurrentDb.OpenRecordset("select * from Qry_TblUser_GetAllBereiche where [UserLogin] = '" & UserLogin & "'")
Do Until rs.EOF
Bereich = DLookup("Bereich", "tblBereiche", "[ID_Breich] =" & rs![Bereich].Value)
strfilter = strfilter & """" & Bereich & """ oder "
rs.MoveNext
Loop
strfilter = Left(strfilter, Len(strfilter) - 6)
Debug.Print strfilter
GetFilter = strfilter
End Function
Das Ergebnis der Funktion beim print ist folgendes:
"BEGS 12" oder "BEGS 18" oder "BEGS 10" oder "BEGS 15"
Wenn ich das Ergebnis manuell als Kriterium in die Abfrage einbaue, funktioniert alles.
Sobald ich versuche das Kriterium über die Funktion automatisch einzutragen, bekomme ich eine leere Tabelle.
Unbenannt.PNG
Funktioniert nicht.
Unbenannt.PNG
Funktioniert.
Vielen Dank im voraus für die Unterstützung!
LG Jan
Sieht dir deine funktionierende Abfrage mal in der SQL-Ansicht an. Dort wirst du sehen, wie der Filterstring korrekt aussehen muss. -> Jeder der durch ODER getrennten Teile muss eine vollständige Bedingung enthalten.
Hallo Phil,
erstmal vielen Dank für Deine Antwort!
Wenn ich Dich richtig verstehe, muss ich den Filterstring so anpassen, dass er im SQL-Statement anstelle der Funktion wieder ein komplettes Statement ergibt.
WHERE (((Qry_tblMitarbeiter_FilterBereichNull.Bereich)="BEGS 12" Or (Qry_tblMitarbeiter_FilterBereichNull.Bereich)="BEGS 18" Or (Qry_tblMitarbeiter_FilterBereichNull.Bereich)="BEGS 10" Or (Qry_tblMitarbeiter_FilterBereichNull.Bereich)="BEGS 15"));
So sieht die SQL Ansicht vom funktionierenden Screenshot aus.
WHERE (((Qry_tblMitarbeiter_FilterBereichNull.Bereich)=GetFilter("Z0021717")));
Und so mit Funktion.
Das heißt mein Filterstring als Ergebnis der Funktion müsste doch wie folgt aussehen:
GetFilter = """BEGS 12"" Or ([Qry_tblMitarbeiter_FilterBereichNull].[Bereich])=""BEGS 18"" Or ([Qry_tblMitarbeiter_FilterBereichNull].[Bereich])=""BEGS 10"" Or ([Qry_tblMitarbeiter_FilterBereichNull].[Bereich])=""BEGS 15"""
End Function
Funktioniert so nur leider auch nicht.
Was habe ich falsch verstanden?
Danke & LG
Jan
Hallo,
GetFilter sollte folgenden String liefern:
"[Bereich]= 'BEGS 12' Or [Bereich])= 'BEGS 18' Or [Bereich])= 'BEGS 10' Or [Bereich])= 'BEGS 15'"Statt der doppelten "" ist es übersichtlicher Hochkomma zu verwenden, außerdem ist es überflüssig den Abfragenamen voranzustellen.
Hi Klaus,
auch Dir lieben Dank für die Antwort.
Leider funktioniert auch das nicht.
Habe in der Funktion alles außer folgende Zeile aus kommentiert (Kopiert von Dir).
GetFilter = "[Bereich]= 'BEGS 12' Or [Bereich])= 'BEGS 18' Or [Bereich])= 'BEGS 10' Or [Bereich])= 'BEGS 15'"
Trotzdem bekomme ich eine leere Abfrage.
Habe es auch ohne die schließenden Klammern ")" nach [Bereich] probiert.
Danke & LG
Jan
Hallo,
die schliessenden runden Klammern sind falsch.Lass die weg:
GetFilter = "[Bereich]= 'BEGS 12' Or [Bereich]= 'BEGS 18' Or [Bereich]= 'BEGS 10' Or [Bereich]= 'BEGS 15'"
Außerdem funktioniert es nicht, eine solche Funktion im Kriterienfeld einer Abfragespalte einzusetzen.
(Die erzeugte SQL-Where-Condition wäre syntaktisch und logisch falsch)
setze die Funktion so in der Abfrage ein:
Feld: GetFilter()
Kriterium: <> 0
Hallo Franz,
auch Dir vielen Dank für die Antwort.
Das mit den Klammern hatte ich mir bereits gedacht.
Schade, dass das so nicht funktioniert - Aber gut dass ich es jetzt weiß.
Ich habe zwar nicht genau verstanden, wie Dein Lösungsansatz funktionieren soll, aber er hat mich auf den richtigen Weg geführt.
Ich erstelle jetzt über die Funktion eine neue Spalte mit allen Bereichen als String und setze dort dann ein "Wie "*" & [Bereich] & "*" Kriterium.
Das läuft!
Vielen Dank für die unterstützung!
LG Jan
Die Zuordnung von User zu Bereich scheint in deiner Abfrage Qry_TblUser_GetAllBereiche ja bereits abgebildet zu sein. Binde diese Abfrage über einen Join mit ein und du kannst dir die ganze Bastelei mit dem Filter sparen.