ich mache eine einfache Abfrage auf eine einzelne Tabelle.
Das Auswahlkriterium hole ich mir aus einem Formular.
Ich trage also unter Kriterium z.B. [forms]![Suchen]![Thema] ein.
Ich trage also in das Formular „SUCHEN“ in das Feld „THEMA“ was ein, und finde das dann über meine Auswahlabfrage in der entspr. Tabelle. Das setzt aber vorraus, daß ich das Thema exakt so eintrage, wie es in der Tabelle steht.
Wie muß der Ausdruck in Kriterien lauten, damit ich auch nur Teile des Themas eingeben kann ?
*[forms]![Suchen]![Thema]* vielleicht ? geht aber nicht !!
Dim Krit, SQL
Krit = ""
If Not Isnull(Me!Textfeld) then Krit = Krit & " AND Textfeld LIKE '" & Me!Textfeld & "'"
If Not Isnull(Me!Zahlenfeld) then Krit = Krit & " AND Zahlenfeld" = Str(Zahlenfeld)
'usw.
If Krit "" then Krit = " WHERE " & Mid(Krit, 5)
SQL = "SELECT \* FROM MeineTabelle" & Krit
CurrentDB.Querydefs("MeineAbfrage").SQL = SQL
' oder auch:
Me!MeinUFO.Form.Recordsource = SQL
' oder wie auch immer...
Die Vorteile sind:
Man bekommt eine saubere und lesbare SQL ohne fehlende Werte
Man kann Plausibilitätsprüfungen einbauen
Man bekommt Fehlermeldungen, wenn etwas nicht stimmt
Man kann einen vernünftigen Benutzerdialog gestalten
Man kann sauber auf Nullwerte in Suchfeldern reagieren (ohne Krüppelkonstrukte wie „OR IS NULL“ in jedem Feld)
Man kann Wildcards richtig einbauen und Feldtypen berücksichtigen
Man vermeidet Formularbezüge in Abfragen und die damit verbundenen Nachteile (Änderungsunfreundlichkeit, Unzugänglichkeit usw.).
Man erstellt portable SQL (SQL mit Formularbezügen verhindert die Ausführbarkeit auf einem Server)
usw. usw.