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 Boolsche Werte per Parameter einfgt, kommt es zu Problemen: VBA bastelt die Ausdrcke True und False beziehungsweise 0 und -1 in Wahr und Falsch um. Das Folgende beschreibt, wie es trotzdem funktioniert.

Beispieldatenbank

Die nachfolgenden Schritte knnen 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 boolschen Werten verhindern

Damit Access den boolschen Wert nicht in einen der beiden Werte Wahr oder Falsch umwandelt, muss man ihm einfach zuvorkommen. Dazu fgt man der Routine, die den SQL-Ausdruck zusammensetzt, einfach eine Hilfsfunktion an den Stellen hinzu, wo boolsche 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 lsst:

INSERT INTO tblBoolToText(BooleanValue) VALUES(Wahr)

Access wandelt den Boolschen Ausdruck in den entsprechenden deutschen Wert aus. Diesen erkennt Access nicht und hlt ihn fr 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 boolschen 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-2015 André Minhorst Alle Rechte vorbehalten.