This is an old revision of the document!
Wandelt einen Wert in die SQL-Scrheibweise. Gut für Filter und Where-Bedinungen einer Abfrage
Download cast_ctosqlstr.bas (V-1.0.0)
Diese Funktion castet verschiedene Typen in das SQL-Format. Im Gegensatz zu BuildCriteria() von VBA, wird hier kein Vergleichsfeld benötigt.
Public Function toSqlStr( _ ByVal iDataType As DataTypeEnum, _ ByVal iItem As Variant, _ Optional ByVal iParams As sqlStrParams = sqlStrParams.[_Default], _ Optional ByVal iNullDefault As Variant = Null _ ) As String
Public Enum sqlStrParams sspIsNullable = 2 ^ 0 'Das Feld darf Null sein sspNullToEmpty = 2 ^ 1 'Im Null-Fall Emptyverwenden sspOnErrorAssert = 2 ^ 5 'Bei einem Fehler den Code unterbrechen sspOnErrorReturnError = 2 ^ 6 'Bei einem Fehler diesen als Wert ausgeben sspOnErrorReturnNull = 2 ^ 7 'Bei einem Fehler den Wert als Null behandeln [_Default] = sspOnErrorReturnError + sspIsNullable End Enum
Für die Ausgabe der Resultate verwendete ich teilweise die Funktion [VBA] print_r().
?toSqlStr(dbText, "ABC") 'ABC' ?toSqlStr(dbNumeric, 123) 123
Vergleich der verschiedenen Datumsausgaben
' Nur das Datum ?toSqlStr(dbDate, now) #03/27/2017# ' Datum & Zeit ?toSqlStr(dbTimeStamp, now) #03/27/2017 12:43:22# ' Nur die Zeit ?toSqlStr(dbTime, now) #12:43:22#
Wenn man nicht einfach dbNumber nimmt sondern sich spezifisch festlegt, wird eine Konvertierung mit möglichen Fehlern ausgeführt
' Einfache Nummer ?toSqlStr(dbNumeric, 123456.78) 123456.78 'als Long. DieNachkommastellen gehen verloren (analog zu cLng()) ?toSqlStr(dbLong, 123456.78) 123457 'Die Nummer ist zu gross für einen Integer ?toSqlStr(dbInteger, 123456.78) #Overflow
Null ist immer wieder ien Spezialfall. Standardmässig wird Null in den Text Null gewandelt. Um den Unterschied zu zeigen verwende ich hier die Ausgabe über [VBA] print_r().
' So sieht die Ausgabe von print_r fr Null aus d Null <Null> 'toSqlString wandelt das in den Text NULL, der so von SQL verstanden wird d toSqlStr(dbNumeric, Null) <String> 'NULL' 'Mit wird definiert, dass anstelle von 0 Empty verwendet werde soll ? toSqlStr(dbNumeric, Null, sspNullToEmpty) 0 ? toSqlStr(dbText, Null, sspNullToEmpty) ''