Ich bin gerade selbst auf diesen Fehler gestoßen. Ich verwende Delphi 7, um mit einer TAdoQuery-Komponente in eine 2003 MS Access-Datenbank zu schreiben. (alter Code) Meine Abfrage funktionierte direkt in MS Access einwandfrei, schlägt aber in Delphi über das TAdoQuery-Objekt fehl. Mein Fehler kam von einem Doppelpunkt (Entschuldigung an den ursprünglichen Poster) von einem Datum/Zeit-Wert.
Soweit ich weiß, ist das Datums-/Zeitformat von Jet SQL #mm/dd/yyyy hh:nn:ss# (0 Links-Padding ist nicht erforderlich).
Wenn die Eigenschaft TAdoQuery.ParamCheck True ist, schlägt dieses Format fehl. (Danke an die Poster!) Zwei Abhilfen sind: a) ParamCheck auf False setzen oder b) ein anderes Datums-/Zeitformat verwenden, nämlich "mm/dd/yyyy hh:nn:ss" (MIT den Anführungszeichen).
Ich habe beide Optionen getestet, und sie haben beide funktioniert.
Auch wenn es sich bei dem Format mit den doppelten Anführungszeichen nicht um das Jet-Datums-/Zeitformat handelt, ist Access bei diesen Datums-/Zeitformaten ziemlich flexibel. Ich vermute auch, dass es etwas mit dem Datums-/Zeitformat von BDE/LocalSQL/Paradox (Delphi 7's native SQL- und Datenbank-Engine) zu tun hat (verwendet doppelte Anführungszeichen, wie oben). Der Parser ist wahrscheinlich so konzipiert, dass er Zeichenketten in Anführungszeichen ignoriert (doppelte Anführungszeichen sind das Trennzeichen für Zeichenketten in BDE LocalSQL), kann aber bei anderen, nicht nativen Datums-/Zeitformaten ins Straucheln geraten.
SQL Server verwendet einfache Anführungszeichen zur Begrenzung von Zeichenketten, so dass dies beim Schreiben in SQL Server-Tabellen anstelle von doppelten Anführungszeichen funktionieren könnte (nicht getestet). Oder vielleicht stolpert das Delphi TAdoQuery Objekt immer noch. Das Ausschalten von ParamCheck könnte in diesem Fall die einzige Option sein. Wenn Sie vorhaben, den Wert der ParamCheck-Eigenschaft im Code umzuschalten, können Sie etwas Verarbeitungszeit sparen, indem Sie sicherstellen, dass die SQL-Eigenschaft leer ist, bevor Sie sie aktivieren, wenn Sie nicht vorhaben, die aktuelle SQL zu analysieren.
0 Stimmen
@Mason - Verwenden Sie Parameter? Wenn nicht, hilft es, ParamCheck := False zu setzen?