Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

IIF - Syntaxfehler?

Begonnen von helli, August 23, 2024, 08:32:57

⏪ vorheriges - nächstes ⏩

helli

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


PhilS

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.

Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

helli

Vielen Dank. Das hat perfekt funktioniert.