Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: JanJB99 am August 13, 2022, 14:26:08

Titel: Abfrage mit mehreren Kriterien aus Funktion
Beitrag von: JanJB99 am August 13, 2022, 14:26:08
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

Titel: Re: Abfrage mit mehreren Kriterien aus Funktion
Beitrag von: PhilS am August 13, 2022, 16:00:58
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.
Titel: Re: Abfrage mit mehreren Kriterien aus Funktion
Beitrag von: JanJB99 am August 13, 2022, 17:27:38
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
Titel: Re: Abfrage mit mehreren Kriterien aus Funktion
Beitrag von: MzKlMu am August 13, 2022, 17:47:51
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.
Titel: Re: Abfrage mit mehreren Kriterien aus Funktion
Beitrag von: JanJB99 am August 13, 2022, 18:04:02
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
Titel: Re: Abfrage mit mehreren Kriterien aus Funktion
Beitrag von: DF6GL am August 13, 2022, 19:58:09
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




Titel: Re: Abfrage mit mehreren Kriterien aus Funktion
Beitrag von: JanJB99 am August 13, 2022, 22:58:06
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
Titel: Re: Abfrage mit mehreren Kriterien aus Funktion
Beitrag von: PhilS am August 15, 2022, 12:59:16
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.