Formátovanie hodnôt dátumu a času pre Access SQL v Delphi
Getty Images/chokkicx
niekedy dostať to hrozné ' Objekt parametra je nesprávne definovaný. Boli poskytnuté nekonzistentné alebo neúplné informácie 'Chyba JET? Tu je návod, ako napraviť situáciu.
Keď potrebujete vytvoriť dotaz SQL proti databáze Accessu, kde sa používa hodnota dátumu (alebo dátumu a času), musíte sa uistiť, že sa používa správne formátovanie.
Napríklad v dotaze SQL: 'SELECT * FROM TBL WHERE DateField = '10/12/2008'' chcete získať všetky záznamy z tabuľky s názvom TBL, kde sa pole všeobecného dátumu DateField rovná 10/12/2008.
Je riadok vyššie jasný? Je to 10. december alebo 12. október? Našťastie sme si celkom istí, že rok v dotaze je 2008.
Mala by byť dátumová časť dopytu špecifikovaná ako MM/DD/RRRR alebo DD/MM/RRRR alebo možno RRRRMMDD? A zohrávajú tu úlohu regionálne nastavenia?
MS Access, Jet, Formátovanie dátumu a času
Keď používate Access a JET ( dbGo - ovládacie prvky ADO Delphi ) formátovanie SQL pre dátumové pole by malo byť *vždy*:
Čokoľvek iné môže pri obmedzenom testovaní fungovať, ale často môže viesť k neočakávaným výsledkom alebo chybám na počítači používateľa.
Tu je vlastná funkcia Delphi, ktorú môžete použiť na formátovanie hodnoty dátumu pre dotaz Access SQL.
Pre „29. januára 1973“ funkcia vráti reťazec „#1973-01-29#“.
Prístup k formátu dátumu a času SQL?
Pokiaľ ide o formátovanie dátumu a času, všeobecný formát je:
Toto je: #rok-mesiac-deňSPACEhodina:minúta:sekunda#
Hneď ako vytvoríte platný reťazec dátumu a času pre SQL pomocou vyššie uvedeného všeobecného formátu a vyskúšate ho pomocou ktoréhokoľvek komponentu množiny údajov Delphi ako TADOQuery, dostanete hrozné „Objekt parametra je nesprávne definovaný. Boli poskytnuté nekonzistentné alebo neúplné informácie“ chyba pribeh programu!
Problém s vyššie uvedeným formátom je v znaku ':' - ako sa používa pre parametre v parametrizovaných dotazoch Delphi. Ako v '... WHERE DateField = :dateValue' - tu je 'dateValue' parameter a ':' sa používa na jeho označenie.
Jedným zo spôsobov, ako „opraviť“ chybu, je použiť iný formát dátumu/času (nahradiť „:“ za „.“):
A tu je vlastná funkcia Delphi na vrátenie reťazca z hodnoty dátumu a času, ktorú môžete použiť pri vytváraní dotazov SQL pre Access, kde potrebujete hľadať hodnotu dátumu a času:
Formát vyzerá divne, ale výsledkom bude správne naformátovaná hodnota reťazca dátumu a času, ktorá sa použije v dotazoch SQL!
Tu je kratšia verzia s použitím rutiny FormatDateTime: