Computerwissenschaften

Formatieren von Datums- / Zeitwerten für Access SQL in Delphi

Haben Sie jemals den schrecklichen JET-Fehler “ Parameterobjekt ist falsch definiert. Inkonsistente oder unvollständige Informationen wurden bereitgestellt “ erhalten? Hier erfahren Sie, wie Sie die Situation korrigieren können.

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

Beispiel: In einer SQL-Abfrage: „SELECT * FROM TBL WHERE DateField=’10 / 12/2008 ‚“ möchten Sie alle Datensätze aus der Tabelle mit dem Namen TBL abrufen, in der ein allgemeines Datumsfeld DateField gleich 10/12/2008 ist.

Ist die obige Linie 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.

Sollte der Datumsteil der Abfrage als MM / TT / JJJJ oder TT / MM / JJJJ oder vielleicht JJJJMMTT angegeben werden? Und spielen hier regionale Rahmenbedingungen eine Rolle?

 

MS Access, Jet, Datums- und Uhrzeitformatierung

Bei Verwendung von Access und JET ( dbGo – ADO Delphi-Steuerelemente. sollte die Formatierung von SQL für das Datumsfeld * immer * wie folgt lauten:

Alles andere funktioniert möglicherweise in begrenzten Tests, 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.

 

Zugriff auf SQL-Datums- / Uhrzeitformat?

Das Format für Datum und Uhrzeit lautet wie folgt:

Dies ist: # Jahr-Monat-TagSPACEhour: Minute: Sekunde #

Sobald Sie eine gültige Datums- / Uhrzeitzeichenfolge für SQL unter Verwendung des oben genannten allgemeinen Formats erstellen und diese unter Verwendung einer der Delphi-Dataset-Komponenten als TADOQuery versuchen, erhalten Sie den schrecklichen Fehler „Parameterobjekt ist falsch definiert. Inkonsistente oder unvollständige Informationen wurden bereitgestellt“ 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 von 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 dazu, dass der korrekt formatierte Wert für Datum und Uhrzeit in SQL-Abfragen verwendet wird!

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

Similar Posts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.