Hallo,
ich habe folgende Aufgabenstellung:
In einer SQL-Anweisung werden Werte aus 3 Eingabefeldern (Vorname, Name, Geburtsdatum) verarbeitet. Das klappt auch sehr gut:
SELECT *
FROM tab_Papierfälle
WHERE Vorname=Forms!Aktensuche!Text_Vname
AND Name=Forms!Aktensuche!Text_Nname
AND GebDatum=Forms!Aktensuche!Text_GebDatum;
Jetzt ist es aber so, dass es auch möglich sein soll in nur 2 der Eingabefelder eine Eingabe machen zu müssen und das Dritte leerzulassen. Im vorliegenden Fall wird nichts gefunden da es keine unvollständigen Datensätze gibt und es auch nicht das Ziel sein soll solche zu finden. Es soll sich einfach so verhalten als ob in der SQL-Anweisung nur 2 Eingabefelder abgefragt werden.
Oder anders gesagt: Ist ein Eingabefeld leer dann dann soll für dieses alles Vorhandene ausgegeben werden.
Dafür habe ich jetzt IIF verwendet:
WHERE IIf([Vorname]=Forms!Aktensuche!Text_Vname Is Null,[Vorname]='*',[Vorname]=Forms!Aktensuche!Text_Vname)
Access meldet beim Abspeichern keinen (Syntax-) Fehler. Das Problem ist nur, dass es nicht funktioniert. Fülle ich mein Textfeld im Formular aus ist alles OK. Lasse ich es leer, dann bekomme ich nicht das erwartete Ergebnis - es wird überhaupt kein Datensatz gefunden.
Kann mir da jemand weiterhelfen?
LG
Zitat von: helli am August 23, 2024, 08:32:57Dafür habe ich jetzt IIF verwendet:
WHERE IIf([Vorname]=Forms!Aktensuche!Text_Vname Is Null,[Vorname]='*',[Vorname]=Forms!Aktensuche!Text_Vname)
Access meldet beim Abspeichern keinen (Syntax-) Fehler. Das Problem ist nur, dass es nicht funktioniert.
Der Ausdruck, den du in dem Iif auswerten lässt ist:
[Vorname]=Forms!Aktensuche!Text_Vname Is Null Der Teil "Forms!Aktensuche!Text_Vname Is Null" ist entweder True oder False.
Daraus resultiert dann der Vergleich: [Vorname] = True (oder: = False)
Das wird vermutlich niemals insgesamt als True ausgewertet.
Es gibt noch weitere Probleme mit deinem Iif-Ausdruck, die ich jetzt gar nicht detailliert erläutern möchte.
Ich würde auf das Iif verzichten und stattdessen ein Kriterium ohne Funktion schreiben:
WHERE ( [Vorname]=Forms!Aktensuche!Text_Vname
OR Forms!Aktensuche!Text_Vname IS NULL)
Die Klammern sind wichtig, wenn du die weiteren Kriterien für Name und GebDatum ergänzt.
Vielen Dank. Das hat perfekt funktioniert.