User Tools

Site Tools


vba:cast:ctosqlstr

This is an old revision of the document!


[VBA] cStrF

Wandelt einen Wert in die SQL-Scrheibweise. Gut für Filter und Where-Bedinungen einer Abfrage

Version 1.0.0 27.03.2017

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.

Definition

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
  • iDataType Type des Feldes
  • iItem Wert oder Array von Werten
  • iParams Nur zuDebugzwecken zu empfehlen. Im Fehlerfall belicht der Parser stehen
  • iNullDefault Wert, falls iItem Null ist und sspNullToEmpty nicht gesetzt ist
  • Return Formatierter Wert oder eine Liste mit den Formatierten Werten

Enumerators

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

Beispiele

Für die Ausgabe der Resultate verwendete ich teilweise die Funktion [VBA] print_r().

Einfache Bespiele

?toSqlStr(dbText, "ABC")
'ABC'
 
?toSqlStr(dbNumeric, 123)
123

Datumbeispiele

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#

Zahlenbeispiele

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 Behandlung

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)
''
vba/cast/ctosqlstr.1490612204.txt.gz · Last modified: 27.03.2017 12:56:44 by yaslaw