Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Fehler bei SQL und Wahr oder Falsch

Wenn man eine SQL-Abfrage per VBA zusammensetzt und dabei Bool’sche Werte per Parameter einfügt, kommt es zu Problemen: VBA bastelt die Ausdrücke True und False beziehungsweise 0 und -1 in Wahr und Falsch um. Das Folgende beschreibt, wie es trotzdem funktioniert.

Beispieldatenbank

Die nachfolgenden Schritte können mit der Funktion BoolToText im Modul mdlTools, der Funktion SampleBoolToText im Modul mdlBoolToText und der Tabelle tblBoolToText der Beispieldatenbenk AccessSQLDotNet.mdb nachvollzogen werden.

Umwandeln von bool’schen Werten verhindern

Damit Access den bool’schen Wert nicht in einen der beiden Werte ‚Wahr’ oder ‚Falsch’ umwandelt, muss man ihm einfach zuvorkommen. Dazu fügt man der Routine, die den SQL-Ausdruck zusammensetzt, einfach eine Hilfsfunktion an den Stellen hinzu, wo bool’sche Werte vorkommen.

Die folgende Funktion funktioniert beispielsweise nicht:

Public Function SampleBoolToText_NotWorking()

Dim strSQL As String

Dim bol As Boolean

bol = True

strSQL = "INSERT INTO tblBoolToText(BooleanValue) VALUES(" & bol & ")"

DoCmd.RunSQL strSQL

End Function

Die Ursache ist leicht zu finden, indem man einmal den resultierenden Ausdruck strSQL ausgeben lässt:

INSERT INTO tblBoolToText(BooleanValue) VALUES(Wahr)

Access wandelt den Bool’schen Ausdruck in den entsprechenden deutschen Wert aus. Diesen erkennt Access nicht und hält ihn für einen Parameter.

Damit das nicht passiert, verwendet man die folgende Hilfsfunktion:

Public Function BoolToString(bol As Boolean) As String

If bol = True Then

BoolToString = "True"

Else

BoolToString = "False"

End If

End Function

In obiger Funktion eingesetzt sieht das ganze wie folgt aus:

Public Function SampleBoolToText_Working()

Dim strSQL As String

Dim bol As Boolean

bol = True

strSQL = "INSERT INTO tblBoolToText(BooleanValue) VALUES(" & BoolToString(bol) & ")"

DoCmd.RunSQL strSQL

End Function

Die Funktion wandelt den bool’schen Wert entweder in die Zeichenkette True oder False um. Da die Funktion den Datentyp des zu verwendenden Wertes auf String ändert, sieht Access in der Folge keinen Anlass mehr, den Wert einzudeutschen.

© 2003-2010 André Minhorst Alle Rechte vorbehalten.