Я только что столкнулся с этой ошибкой сам. Я использую Delphi 7 для записи в базу данных MS Access 2003 с помощью компонента TAdoQuery. (старый код) Мой запрос работал нормально непосредственно в MS Access, но в Delphi происходит сбой через объект TAdoQuery. Моя ошибка произошла из двоеточия (извинения за оригинальный постер) из значения даты / времени.
Насколько я понимаю, формат даты / времени в Jet SQL равен # мм / дд / гггг чч: nn: сс # (заполнение слева не требуется).
Если свойство TAdoQuery.ParamCheck имеет значение True, этот формат завершается ошибкой. (Спасибо, афиши!) Два обходных пути: а) установить ParamCheck в False или б) использовать другой формат даты / времени, а именно "мм / дд / гггг чч: nn: ss" (с двойными кавычками).
Я протестировал оба эти варианта, и они оба работали.
Даже несмотря на то, что формат даты / времени в двойных кавычках не является форматом даты / времени Jet, Access довольно гибок в использовании этих форматов даты и времени. Я также подозреваю, что это как-то связано с форматом даты / времени BDE / LocalSQL / Paradox (собственный движок SQL и движок базы данных Delphi 7) (используются двойные кавычки, как указано выше). Синтаксический анализатор, вероятно, предназначен для игнорирования строк в кавычках (двойные кавычки являются разделителем строковых значений в BDE LocalSQL), но может несколько наткнуться на другие не родные форматы даты / времени.
SQL Server использует одинарные кавычки для разделения строк, поэтому они могут работать вместо двойных кавычек при записи в таблицы SQL Server (не проверено). Или, может быть, объект Delphi TAdoQuery все равно оступится. Отключение ParamCheck в этом случае может быть единственным вариантом. Если вы планируете переключать значение свойства ParamCheck в коде, вы сэкономите некоторое время на обработку, гарантируя, что свойство SQL будет пустым до его включения, если вы не планируете анализировать текущий SQL.