Hallo Uwe,
ist schon lange her die Anfrage. Ich denke, Du wirst inzwischen eine Lösung gefunden haben.
Das Vorgehen, dass ich in solchen Fällen wähle ist die sog. NZ-Funktion. Sie liefert bei fehlenden Werten einen Ersatzwert.
Syntax: NZ(erwarteter Wert , Ersatzwert).
In der SQL-Anweisung musst Du dann nur noch dafür sorgen, dass der Ersatzwert immer „WAHR“ ist, also keinen Fehler produziert.
Hierzu verwende ich den Ausdruck: 1 = 1
Dies kombiniert mit der zusammengesetzten SQL-Anweisungen würde z. B. ergeben:
SQLTEXT = "select * from tab_abcd where nz( " & Suchfeld1 & ", 1=1) and nz( " & Suchfeld2 & ", 1=1) and nz( " & Suchfeld3 & „, 1=1)“
DoCmd RunSQL SQLTEXT
So würdest Du die Abfrage auch mit fehlenden Werten aufbauen können.
Sofern die Suchfelder nicht aus Zahlenwerten, sondern aus Charakter/Zeichen-Werten bestehen, dann eben noch die Anführungsstriche vor und nach der Variablen Suchfeld1-3 ergänzen, damit es passt, also:
SQLTEXT = „select * from tab_abcd where nz( '“ & Suchfeld1 & „’, 1=1) and nz( '“ & Suchfeld2 & „’, 1=1) and nz( '“ & Suchfeld3 & „’, 1=1)“
Sofern Du an das SQL nur den Vergleichswert übergibst und die Variable selbst bereits im SQL stehen soll, geht es so natürlich nicht, sondern dann muss Du modifizieren:
SQLTEXT = "select * from tab_abcd where " & iif(isnull(Formularfeld1),„1 = 1“, "DBFeld1 = ’ & Formularfeld1 & „’“ ) & " and " &
iif(isnull(Formularfeld2),„1 = 1“, "DBFeld2 = ’ & Formularfeld2 & „’“ ) & " and " &
iif(isnull(Formularfeld3),„1 = 1“, "DBFeld3 = ’ & Formularfeld3 & „’“ )
Hiebei wird die IIF-Funktion genutzt (ist wie ein normales If then else, nur in einem Ausdruck ohne die Worte Then und Else.
Gruß
Ulrich St
ich habe in einem Formular drei Optionsfelder
Wie kann ich es schaffen, dass ein Nutzer mal nur eine Option
in dem Formular wählen kann oder zwei und trotzdem die Abrfage
Ergebnisse liefert