none
Abfrage mit Filter entsprechend Parameter aus Formular - bei "Alle" sollen alle Datensätze ausgeworfen werden.

    Frage

  • Hallo, kann mir hier wer helfen?

    Bin kein Profi und quäle mich seit Stunden mit diesem Problem:

    meine Abfrage qryElementeliste soll im Falle, dass das Formularfeld "Firma" [cfdFirmaAuswahl] auf "Alle" (ID = 1) steht auch alle Einträge aller Firmen auswerfen. Bei der IIf-Abfrage funktioniert aber Like "*" nicht - gibt es hier Alternativen?

    SELECT tblElement.*, qryElementKosten.SummevonE2EtKosten, tblElement.E1Bauteil
    FROM qryElementKosten RIGHT JOIN tblElement ON qryElementKosten.ID = tblElement.ID
    WHERE (((tblElement.E1Bauteil)=[Formulare]![frmElemente]![cfdBauteilAuswahl]) AND ((tblElement.E1Firma)=IIf([Formulare]![frmElemente]![cfdFirmaAuswahl]=1,Like "*",[Formulare]![frmElemente]![cfdFirmaAuswahl])));

    Vielen Dank für eure Hilfe!

    LG

    Montag, 26. September 2016 16:13

Alle Antworten

  • Hallo LG,

    LIKE "*" kann man nicht als Teilausdruck verwenden, bestenfalls nur das "*".  Möglich wäre etwas wie

    SELECT tblElement.*, qryElementKosten.SummevonE2EtKosten, tblElement.E1Bauteil
    FROM qryElementKosten 
    INNER JOIN tblElement ON qryElementKosten.ID = tblElement.ID
    WHERE (tblElement.E1Bauteil = [Formulare]![frmElemente]![cfdBauteilAuswahl]
      AND (tblElement.E1Firma LIKE IIf([Formulare]![frmElemente]![cfdFirmaAuswahl] = 1, [Formulare]![frmElemente]![cfdFirmaAuswahl], "*");

    wobei mir dabei aufstößt, dass Du auf "1" testet, worauf man direkt testen könnte. Sollte da ein variabler Wert drin stehen könnten, wie ich vermute, wäre besser etwas wie (Rest wie oben):

    -- alternativ, wenn cfdFirmaAuswahl nicht nur 1 ist
      AND ([Formulare]![frmElemente]![cfdFirmaAuswahl] = '' OR tblElement.E1Firma LIKE [Formulare]![frmElemente]![cfdFirmaAuswahl]);
    

    wobei man programmatisch darauf achten sollte, dass das Eingabefeld ggf. leer ist. Dann entfällt der Teil des Kriteriums.

    Zum anderen funktioniert ein RIGHT JOIN nicht auf der Ebene. Dadurch dass Du im WHERE Kriterien anwendest, wird daraus implizit ein INNER JOIN. Muss es ein RIGHT JOIN sein, so müsstest Du die Kritieren ins JOIN ON verschieben.

    Gruß Elmar

    Montag, 26. September 2016 16:35
  • Hallo Elmar!

    Danke für deine Hinweise! Mit folgendem Code hat es jetzt funktioniert:

    SELECT tblElement.*, qryElementKosten.SummevonE2EtKosten, tblElement.E1Bauteil
    FROM qryElementKosten RIGHT JOIN tblElement ON qryElementKosten.ID = tblElement.ID
    WHERE ((tblElement.E1Bauteil)=Formulare!frmElemente!cfdBauteilAuswahl) And (tblElement.E1Firma Like IIf(Formulare!frmElemente!cfdFirmaAuswahl<>"",Formulare!frmElemente!cfdFirmaAuswahl,"*"));

    Der Right Join ist notwendig und das Ergebnis passt, für deinen Hinweis die Kriterien in Join On zu verschieben fehlt mir offensichtlich das Grundlagenwissen - damit konnte ich leider nichts anfangen.

    Aber jetzt schaut es gut aus und ich bin mal zufrieden.

    Danke noch einmal

    LG

    Konrad

    Dienstag, 27. September 2016 08:17