Gemeinsam zu mehr Effizienz in der Anwendungserstellung
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= | + | 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] | |
- | + | ||
<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 |
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.
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")
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