Wiki der Access Code Library

Gemeinsam zu mehr Effizienz in der Anwendungserstellung

SQL-Text für Filterbedingung

Aus Access Code Library
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
K
K
Zeile 7: Zeile 7:
Der Text-Filterwert muss mit {{Taste|'}} umschlossen sein. Bei Jet/ACE ist auch {{Taste|"}} möglich.
Der Text-Filterwert muss mit {{Taste|'}} umschlossen sein. Bei Jet/ACE ist auch {{Taste|"}} möglich.
-
Filterwert: abc
+
SQL-Text für Filterwert: abc
<source>
<source>
... Textfeld = 'abc'
... Textfeld = 'abc'
Zeile 14: Zeile 14:
Dabei ist zu beachten, dass bei der Verwendung von {{Taste|'}} als Textbegrenzung im Filterwert vorhandene {{Taste|'}} verdoppelt werden müssen, da sonst der Text zu früh als beendet gekennzeichnet wird.
Dabei ist zu beachten, dass bei der Verwendung von {{Taste|'}} als Textbegrenzung im Filterwert vorhandene {{Taste|'}} verdoppelt werden müssen, da sonst der Text zu früh als beendet gekennzeichnet wird.
-
Filterwert: a'b
+
SQL-Text für Filterwert: a'b
<source>
<source>
... Textfeld = 'a''c'
... Textfeld = 'a''c'
Zeile 30: Zeile 30:
Zahlen sind im amerikanischen Zahlenformat darzustellen (Punkt statt Komma).
Zahlen sind im amerikanischen Zahlenformat darzustellen (Punkt statt Komma).
-
Filterwert: 123,45
+
SQL-Text für Filterwert: 123,45
<source>
<source>
... Textfeld = 123.45
... Textfeld = 123.45
Zeile 48: Zeile 48:
: MSSQL: 'yyyymmdd'
: MSSQL: 'yyyymmdd'
-
Filterwert: 24.12.2015
+
SQL-Text für Filterwert: 24.12.2015
<source>
<source>
... Datumsfeld = #2015-12-24#
... Datumsfeld = #2015-12-24#
Zeile 72: Zeile 72:
: MSSQL: 1
: MSSQL: 1
-
Filterwert: True
+
SQL-Text für Filterwert: True
<source>
<source>
... Booleanfeld = True
... Booleanfeld = True

Version vom 22:03, 10. Mai 2015

Wenn ein Filterausdruck als String benötigt wird, müssen die Filterwerte SQL-konform in Text konvertiert werden.
Der zu erzeugende Text hängt vom eingesetzten DBMS und/oder der verwendeten Datenzugriffstechnik ab.

Inhaltsverzeichnis

Datentypen

Text

Der Text-Filterwert muss mit ' umschlossen sein. Bei Jet/ACE ist auch " möglich.

SQL-Text für Filterwert: abc

... Textfeld = 'abc'

Dabei ist zu beachten, dass bei der Verwendung von ' als Textbegrenzung im Filterwert vorhandene ' verdoppelt werden müssen, da sonst der Text zu früh als beendet gekennzeichnet wird.

SQL-Text für Filterwert: a'b

... Textfeld = 'a''c'

=> Filterwert ist in Variable gespeichert:

FilterString = "Textfeld = '" & Replace(FilterWertVariable, "'", "''") & "'"
Anmerkung: Die gleichen Regeln gelten natürlich auch bei Bedingungen mit Like, >=, <= usw.

Zahlen (Integer, Double, ...)

Zahlen sind im amerikanischen Zahlenformat darzustellen (Punkt statt Komma).

SQL-Text für Filterwert: 123,45

... Textfeld = 123.45

=> Filterwert ist in Variable gespeichert:

FilterString = "Zahlenfeld = " & Str(FilterWertVariable)

Datum/Uhrzeit

Das Datumsformat hängt vom eingesetzten DBMS ab.

Beispiele
Jet: #mm/dd/yyyy# oder #yyyy-mm-dd#
MSSQL: 'yyyymmdd'

SQL-Text für 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.

Ja/Nein, Wahr/Falsch

Das Boolean-Format hängt vom eingesetzten DBMS ab.

Beispiele
Jet: True oder -1
MSSQL: 1

SQL-Text für Filterwert: True

... Booleanfeld = True
Anmerkung: Falls ODBC-verknüpfte MSSQL-Tabellen mit Bit-Feldern verwendet werden, ist von -1 als True-Wert abzuraten.

ODBC konvertiert True richtig als 1 nach MSSQL. Wird jedoch -1 verwendet, gibt der ODBC-Treiber diese Zahl direkt an das DBMS weiter und da -1 nicht 1 entspricht trifft die Bedingung nie zu. Gemeinheit dabei: in der verknüpften MSSQL-Tabelle wird True als -1 angezeigt.

=> Filterwert ist in Variable gespeichert:

FilterString = "Booleanfeld= " & IIF(FilterWertVariable = True, "True", "False")

Einsatz von Hilfsprozeduren und Klassen aus der CodeLib

Hilfsfunktion zur Umwandlung in Text aus Sqltools

FilterString = "Textfeld = " & SqlTools.TextToSqlText(FilterWertVariable)
FilterString = "Zahlenfeld = " & SqlTools.NumberToSqlText(FilterWertVariable)
FilterString = "Datumsfeld = " & SqlTools.DateToSqlText(FilterWertVariable)
FilterString = "Booleanfeld = " & SqlTools.BooleanToSqlText(FilterWertVariable)

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)
FilterString = SqlTools.BuildCriteria("Booleanfeld", SQL_Boolean, SQL_Equal, FilterWertVariable)

Klasse FilterStringBuilder

With NewFilterStringBuilder
 
   .Add "Textfeld", SQL_Text, SQL_Equal, FilterWertVariable
   .Add "Zahlenfeld", SQL_Numeric, SQL_Equal, FilterWertVariable
   .Add "Datumsfeld", SQL_DateTime, SQL_Equal, FilterWertVariable
   .Add "Booleanfeld", SQL_Boolean, SQL_Equal, FilterWertVariable
 
   FilterString = .ToString
 
End With