Formatieren von Datums- und Uhrzeitwerten für Access SQL in Delphi

Immer das Schreckliche bekommen "Parameterobjekt ist falsch definiert. Es wurden inkonsistente oder unvollständige Informationen bereitgestellt"JET-Fehler? Hier erfahren Sie, wie Sie die Situation beheben können.

Wenn Sie eine SQL-Abfrage für eine Access-Datenbank erstellen müssen, in der ein Datums- (oder Datums- / Uhrzeit-) Wert verwendet wird, müssen Sie sicherstellen, dass die richtige Formatierung verwendet wird.

Beispielsweise möchten Sie in einer SQL-Abfrage: "SELECT * FROM TBL WHERE DateField = '10 / 12/2008 '" alle Datensätze aus der Tabelle mit dem Namen TBL abrufen, in der ein allgemeines Datumsfeld DateField 10/12/2008 entspricht.

Ist die obige Zeile klar? Ist das der 10. Dezember oder der 12. Oktober? Zum Glück sind wir uns ziemlich sicher, dass das Jahr in der Abfrage 2008 ist.

Soll der Datumsteil der Abfrage als MM / TT / JJJJ oder TT / MM / JJJJ oder vielleicht JJJJMMTT angegeben werden? Und spielt hier das regionale Umfeld eine Rolle??

MS Access, Jet, Datums- und Uhrzeitformatierung

Bei Verwendung von Access und JET (dbGo-ADO Delphi-Steuerelemente) wird die Formatierung der SQL für die Datumsfeld sollte * immer * sein:

Alles andere funktioniert möglicherweise nur in begrenztem Umfang, kann jedoch häufig zu unerwarteten Ergebnissen oder Fehlern auf dem Computer des Benutzers führen.

Hier ist eine benutzerdefinierte Delphi-Funktion, mit der Sie einen Datumswert für die Access SQL-Abfrage formatieren können.

Für "29. Januar 1973" gibt die Funktion die Zeichenfolge "# 1973-01-29 #" zurück..

Greifen Sie auf das SQL-Datums- / Uhrzeitformat zu?

Das allgemeine Format für die Formatierung von Datum und Uhrzeit lautet:

Dies ist: # Jahr-Monat-TagSPACEhour: minute: second #

Sobald Sie eine gültige Datums- / Uhrzeitzeichenfolge für die SQL im oben genannten allgemeinen Format erstellen und diese mit einer der Delphi-Dataset-Komponenten als TADOQuery testen, erhalten Sie die schreckliche "Parameterobjekt ist nicht korrekt definiert. Es wurden inkonsistente oder unvollständige Informationen angegeben." Fehler zur Laufzeit!

Das Problem mit dem obigen Format liegt im Zeichen ":", wie es für Parameter in parametrisierten Delphi-Abfragen verwendet wird. Wie in "… WHERE DateField =: dateValue" - hier ist "dateValue" ein Parameter und das ":" wird verwendet, um ihn zu markieren.

Eine Möglichkeit, den Fehler zu beheben, besteht darin, ein anderes Format für Datum / Uhrzeit zu verwenden (ersetzen Sie ":" durch "."):

Und hier ist eine benutzerdefinierte Delphi-Funktion, mit der Sie eine Zeichenfolge aus einem Datums- / Uhrzeitwert zurückgeben können, den Sie beim Erstellen von SQL-Abfragen für Access verwenden können, bei denen Sie nach einem Datums- / Uhrzeitwert suchen müssen:

Das Format sieht seltsam aus, führt jedoch zu dem korrekt formatierten Wert für die Datums- und Uhrzeitzeichenfolge, der in SQL-Abfragen verwendet wird!

Hier ist eine kürzere Version mit der FormatDateTime-Routine: