Elite Veteran
Beiträge: 868
Ort: Wien | Hallo, Dirk!
hochlenert - 14.08.12
in meiner Abfrage muss das Kriterium zB. "1 der 2 oder 9" lauten und ich will dieses Kriterium über eine Variable setzen. Ich habe eine Tabelle angelegt, aus der ich dieses Kriterium auslese:
fctSenddatenstellen_regionen = DLookup("[Regionen]", "Datenstellen", "[Datenstelle] = '" & Forms![arj]![Datenstelle].Value & "'")
und in meine Abfrage einfüge. Der Teil der Abfrage sieht dann so aus:
...WHERE (((CDbl(IIf(IsNull([VRG])=True,99,[VRG])))=fctSenddatenstellen_regionen()) AND....
Wenn das Kriterium nur eine Position hat, also z.B. "1", dann funktioniert es. Wenn es aber mehrere Möglichkeiten beinhaltet, bleibt die Abfrage leer, weil anscheinend das "oder" nicht verstanden wird. Ich habe das mit "or" ersetzt, hat auch nicht geklappt. Jetzt bin ich etwas ratlos. Die Abfrage ist sehr groß, so dass ich die ungerne in SQL in einen VBA-Code integrieren würde, weil es doch sehr unübersichtlich wird. Hilfe!
Was von der Funktion kommt, wird von der Abfrage komplett "wörtlich" (literal) genommen, d.h. du kannst keine Operatoren oder Trennzeichen mitschicken. Daher ist die Standardlösung das Erstellen oder Ändern des SQL-Strings per Code, das du vermeiden willst. Es gibt allerdings auch noch eine Trickserei auf Basis von Eval:
1. Deine Funktion muss die Werte kommasepariert liefern, also:
1,2,9
2. Der entsprechende WHERE-Abschnitt muss so aussehen:
WHERE Eval([Datenstelle] & ' In(' & fctSenddatenstellen_regionen() & ')')=True
----- Servus
Karl
*********
Access-Entwickler-Konferenz: https://www.donkarl.com/?aek - Jetzt anmelden für 19./20.10. in Nürnberg
Access DevCon Vienna: https://www.donkarl.com/devcon
Access Forever: https://www.accessforever.org
Access News: https://www.youtube.com/playlist?list=PLVCeBbJIMDvdJ8ghMbEakJ6_EQyvy... |