Ho appena riscontrato questo errore. Sto usando Delphi 7 per scrivere su un database MS Access 2003 usando un componente TAdoQuery. (vecchio codice) La mia query ha funzionato bene direttamente in MS Access, ma fallisce in Delphi attraverso l'oggetto TAdoQuery. Il mio errore proviene da due punti (scuse per il poster originale) da un valore di data/ora.
A quanto ho capito, il formato data/ora Jet SQL è # mm/gg/aaaa hh: nn: ss # (non è richiesto il riempimento a sinistra 0).
Se la proprietà TAdoQuery.ParamCheck è True, questo formato ha esito negativo. (Grazie poster!) Due soluzioni sono: a) impostare ParamCheck su False, oppure b) utilizzare un formato di data/ora diverso, vale a dire "mm/gg/aaaa hh: nn: ss" (con le virgolette doppie).
Ho testato entrambe le opzioni e hanno funzionato entrambe.
Anche se il formato data/ora a doppia virgola non è il formato data/ora Jet, Access è abbastanza buono per essere flessibile su questi formati di data/ora. Sospetto anche che abbia qualcosa a che fare con il formato data/ora di BDE/LocalSQL/Paradox (Delphi 7 SQL nativo e motore di database) (usa le virgolette doppie, come sopra). Il parser è probabilmente progettato per ignorare le stringhe tra virgolette (le virgolette doppie sono il delimitatore del valore stringa in BDE LocalSQL), ma potrebbe incappare in qualche modo su altri formati data/ora non nativi.
SQL Server utilizza le virgolette singole per delimitare le stringhe, in modo che funzioni invece di virgolette doppie quando si scrive su tabelle di SQL Server (non testato). O forse l'oggetto Delphi TAdoQuery continuerà a inciampare. Disattivare ParamCheck in quel caso potrebbe essere l'unica opzione. Se si prevede di attivare il valore della proprietà ParamCheck nel codice, si risparmia tempo di elaborazione assicurando che la proprietà SQL sia vuota prima di abilitarlo, se non si sta pianificando l'analisi dell'SQL corrente.
@Mason - Stai utilizzando i parametri? In caso contrario, settare ParamCheck: = False help? –
Sto usando i parametri. –