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 (Datentyp: Datum/Uhrzeit)
K
Zeile 63: Zeile 63:
</source>
</source>
Davon ist abzuraten, da das z. B. nicht mit ODBC-verknüpften MSSQL-Tabellen funktioniert - wegen unterschiedlichem Datumsstartwert (Zahl 0) zw. VBA und MSSQL.
Davon ist abzuraten, da das z. B. nicht mit ODBC-verknüpften MSSQL-Tabellen funktioniert - wegen unterschiedlichem Datumsstartwert (Zahl 0) zw. VBA und MSSQL.
 +
 +
===Datentyp: Boolead===
 +
Das Datumsformat hängt vom eingesetzten DBMS ab.
 +
Beispiele:
 +
Jet: True oder -1
 +
MSSQL: 1
 +
 +
 +
Filterwert: True
 +
<source>
 +
... Datumsfeld = True
 +
</source>
 +
 +
Anm.: 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 wird direkt diese Zahl an das DBMS weitergebeben und da -1 nicht 1 entspricht trifft die Bedinung nie zu.
 +
''Gemeinheit'' dabei: in der verknüfpften MSSQL-Tabelle wird True als -1 angezeigt.
 +
 +
=>
 +
Filterwert ist in Variable gespeichert:
 +
<source>
 +
FilterString = "Datumsfeld = " & IIF(FilterWertVariable = True, "True", "False")
 +
</source>
 +
===Einsatz von Hilfsprozeduren und Klassen aus der CodeLib===
===Einsatz von Hilfsprozeduren und Klassen aus der CodeLib===
===== Textfeld =====
===== Textfeld =====
-
Hilfsfunktion für Umwandlung in Text aus [http://source.access-codelib.net/filedetails.php?repname=CodeLib&path=%2Ftrunk%2Fdata%2FSqlTools.bas SqlTools]:
+
Hilfsfunktion für Umwandlung in Text aus [http://source.access-codelib.net/filedetails.php?repname=CodeLib+%28Entwurf%2C+branches%2Fdraft%29&path=%2Fdata%2FSqlTools.cls SqlTools]
<source>
<source>
-
FilterString = "Textfeld = " & TextToSqlText(FilterWertVariable)  
+
FilterString = "Textfeld = " & SqlTools.TextToSqlText(FilterWertVariable)  
</source>
</source>
<source>
<source>
-
FilterString = "Zahlenfeld = " & NumberToSqlText(FilterWertVariable)  
+
FilterString = "Zahlenfeld = " & SqlTools.NumberToSqlText(FilterWertVariable)  
</source>
</source>
<source>
<source>
-
FilterString = "Datumsfeld = " & DateToSqlText(FilterWertVariable)  
+
FilterString = "Datumsfeld = " & SqlTools.DateToSqlText(FilterWertVariable)
 +
</source>
 +
<source>
 +
FilterString = "Booleanfeld = " & SqlTools.BooleanToSqlText(FilterWertVariable)  
</source>
</source>
-
 
+
''BuildCriteria'' aus [http://source.access-codelib.net/filedetails.php?repname=CodeLib+%28Entwurf%2C+branches%2Fdraft%29&path=%2Fdata%2FSqlTools.cls SqlTools]
-
Verwendung von ''BuildCriteria'' aus [http://source.access-codelib.net/filedetails.php?repname=CodeLib+%28Entwurf%2C+branches%2Fdraft%29&path=%2Fdata%2FSqlTools.cls SqlTools]
+
<source>
<source>
FilterString = SqlTools.BuildCriteria("Textfeld", SQL_Text, SQL_Equal, FilterWertVariable)
FilterString = SqlTools.BuildCriteria("Textfeld", SQL_Text, SQL_Equal, FilterWertVariable)
Zeile 89: Zeile 114:
FilterString = SqlTools.BuildCriteria("Datumsfeld", SQL_DateTime, SQL_Equal, FilterWertVariable)
FilterString = SqlTools.BuildCriteria("Datumsfeld", SQL_DateTime, SQL_Equal, FilterWertVariable)
</source>
</source>
-
 
+
<source>
 +
FilterString = SqlTools.BuildCriteria("Booleanfeld", SQL_Boolean, SQL_Equal, FilterWertVariable)
 +
</source>
Verwendung von [http://source.access-codelib.net/filedetails.php?repname=CodeLib&path=%2Fbranches%2Fdraft%2Fdata%2FFilterStringBuilder.cls FilterStringBuilder]
Verwendung von [http://source.access-codelib.net/filedetails.php?repname=CodeLib&path=%2Fbranches%2Fdraft%2Fdata%2FFilterStringBuilder.cls FilterStringBuilder]
Zeile 98: Zeile 125:
   .Add "Zahlenfeld", SQL_Numeric, SQL_Equal, FilterWertVariable
   .Add "Zahlenfeld", SQL_Numeric, SQL_Equal, FilterWertVariable
   .Add "Datumsfeld", SQL_DateTime, SQL_Equal, FilterWertVariable
   .Add "Datumsfeld", SQL_DateTime, SQL_Equal, FilterWertVariable
 +
  .Add "Booleanfeld", SQL_Boolean, SQL_Equal, FilterWertVariable
    
    
   FilterString = .ToString
   FilterString = .ToString

Version vom 21:03, 10. Mai 2015

Wenn ein Filterausdruck als String benötigt wird, müssen die Filterwerte SQL-konform in Text konvertiert werden.

Inhaltsverzeichnis

Datentyp: Text

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.

Datentyp: Zahlen (Integer, Double, ...)

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

Filterwert: 123,45

... Textfeld = 123.45

=> Filterwert ist in Variable gespeichert:

FilterString = "Zahlenfeld = " & Str(FilterWertVariable)

Datentyp: Datum/Uhrzeit

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.

Datentyp: Boolead

Das Datumsformat hängt vom eingesetzten DBMS ab. Beispiele: Jet: True oder -1 MSSQL: 1


Filterwert: True

... Datumsfeld = True

Anm.: 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 wird direkt diese Zahl an das DBMS weitergebeben und da -1 nicht 1 entspricht trifft die Bedinung nie zu. Gemeinheit dabei: in der verknüfpften MSSQL-Tabelle wird True als -1 angezeigt.

=> Filterwert ist in Variable gespeichert:

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


Einsatz von Hilfsprozeduren und Klassen aus der CodeLib

Textfeld

Hilfsfunktion für 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)

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
   .Add "Booleanfeld", SQL_Boolean, SQL_Equal, FilterWertVariable
 
   FilterString = .ToString
 
End With