Richtiges Datum für SQL

Access mag sich einigermaßen landessprachlich geben, aber wenn es ans Eingemachte geht, muss es dann doch wieder Amerikanisch sein. Am häufigsten passiert dies beim Datum in einem SQL-Statement.

Listing 1 zeigt einen typischen Fall, wobei die Datumswerte normalerweise eher aus einem Eingabefenster kommen, was aber am Problem selber nichts ändert.

Sub LoescheAltdaten()
Dim datVon As Date
Dim datBis As Date
Dim strSQL As String
datVon = #12/24/2005#
datBis = Date - 14
strSQL = "DELETE * FROM [Bestellungen] WHERE " & _
"([Bestelldatum] >= " & _
datVon & " AND [Bestelldatum] <= " & datBis & ")"
MsgBox strSQL
'CurrentDb.Execute strSQL ' zu Testzwecken kommentiert
End Sub

Das Beispiel in Listing 1 ist doppelt fehlerhaft. Am leichtesten erkennbar sind noch die fehlenden #-Zeichen zur Kennzeichnung eines (länderspezifischen!) Datums innerhalb einer Zeichenkette.

Automatische Übersetzung

Wer es aber aus dem grafischen Abfrage-Editor von Access gewöhnt ist, dass darin ein deutsch formatiertes Datum steht, hat dort noch nie auf die tatsächliche SQL-Ansicht umgeschaltet. Die amerikanischen Funktionsnamen und Formate werden da nämlich kurzerhand ins Deutsche übersetzt.

Das hat nicht nur den Vorteil, dass Sie die aus VBA gewohnten Befehle wie Left() in Englisch eingeben können und sie nach Verlassen der Zelle sofort in Deutsch vorfinden. Es hat leider auch den Nachteil, dass Feldnamen wie Agent-No für eine Vertreter-Personalnummer zwar korrekt wegen des Minuszeichens in zwei vermutete Feldnamen zerlegt werden, aber dann das No fälschlich nochmals übersetzt wird. Nach der
Eingabe von Agent-No verwandelt der grafische Abfrage-Editor dies unbekümmert in [Agent]-[Nein].