A07: komplexes Kriterium als Variable
Karl Donaubauer
Gesendet: 14.08.12 12:57
Betreff: RE: A07: komplexes Kriterium als Variable



Elite Veteran

Beiträge: 849
50010010010025
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
Access DevCon Vienna: https://www.donkarl.com/devcon
Access Forever: https://www.accessforever.org
Access News: https://www.youtube.com/playlist?list=PLVCeBbJIMDvdJ8ghMbEakJ6_EQyvy...
Top of the page Bottom of the page