Gemeinsam zu mehr Effizienz in der Anwendungserstellung
Wenn ein Filterausdruck als String benötigt wird, müssen die Filterwerte SQL-konform in Text konvertiert werden.
Inhaltsverzeichnis |
Der Text-Filterwert muss mit ' umschlossen sein. Bei Jet/ACE ist z.B. auch " möglich.
Filterwert: abc
... Textfeld = 'abc'
Dabei ist zu beachten, dass ' im Filterwert im obigen Fall verdoppelt werden müssen, da sonst der Text zu früh als beendet markiert wird.
Filterwert: a'b
... Textfeld = 'a''c'
=> Filterwert ist in Variable gespeichert:
FilterString = "Textfeld = '" & Replace(FilterWertVariable, "'", "''") & "'"
Anm.: Die gleichen Regeln gelten natürlich auch bei Bedingungen mit Like, >=, <= usw.
Zahlen sind im amerikanischen Zahlenformat darzustellen (Punkt statt Komma).
Filterwert: 123,45
... Textfeld = 123.45
=> Filterwert ist in Variable gespeichert:
FilterString = "Zahlenfeld = " & Str(FilterWertVariable)
Das Datumsformat hängt vom eingesetzten DBMS ab. Beispiele: Jet: #mm/dd/yyyy# oder #yyyy-mm-dd# MSSQL: 'yyyymmdd'
Filterwert: 24.12.2015
... Datumsfeld = #2015-12-24#
=> Filterwert ist in Variable gespeichert:
FilterString = "Datumsfeld = " & Format(FilterWertVariable, "\#yyyy-mm-dd#")
Anm.: Auch schon gesehen:
FilterString = "Datumsfeld = " & CLng(FilterWertVariable)
Davon ist abzuraten, da das z. B. nicht mit ODBC-verknüpften MSSQL-Tabellen funktioniert - wegen unterschiedlichem Datumsstartwert (Zahl 0) zw. VBA und MSSQL.
Hilfsfunktion für Umwandlung in Text aus SqlTools:
FilterString = "Textfeld = " & TextToSqlText(FilterWertVariable)
FilterString = "Zahlenfeld = " & NumberToSqlText(FilterWertVariable)
FilterString = "Datumsfeld = " & DateToSqlText(FilterWertVariable)
Verwendung von BuildCriteria aus SqlTools
FilterString = SqlTools.BuildCriteria("Textfeld", SQL_Text, SQL_Equal, FilterWertVariable)
FilterString = SqlTools.BuildCriteria("Zahlenfeld", SQL_Numeric, SQL_Equal, FilterWertVariable)
FilterString = SqlTools.BuildCriteria("Datumsfeld", SQL_DateTime, SQL_Equal, FilterWertVariable)
Verwendung von FilterStringBuilder
With NewFilterStringBuilder .Add "Textfeld", SQL_Text, SQL_Equal, FilterWertVariable .Add "Zahlenfeld", SQL_Numeric, SQL_Equal, FilterWertVariable .Add "Datumsfeld", SQL_DateTime, SQL_Equal, FilterWertVariable FilterString = .ToString End With