Oblikovanje vrednosti datuma in časa za Access SQL v Delphiju
Getty Images/chokkicx
kdaj dobiš grozno Objekt parametra ni pravilno definiran. Zagotovljene so bile nedosledne ali nepopolne informacije Napaka JET? Tukaj je opisano, kako popraviti situacijo.
Ko morate ustvariti poizvedbo SQL za Accessovo zbirko podatkov, kjer je uporabljena vrednost datuma (ali datuma in časa), se morate prepričati, da je uporabljeno pravilno oblikovanje.
Na primer, v poizvedbi SQL: 'SELECT * FROM TBL WHERE DateField = '10/12/2008'' želite pridobiti vse zapise iz tabele z imenom TBL, kjer je splošno polje datuma DateField enako 10/12/2008.
Je zgornja črta jasna? Je to 10. december ali 12. oktober? Na srečo smo skoraj prepričani, da je leto v poizvedbi 2008.
Ali naj bo datumski del poizvedbe določen kot MM/DD/LLLL ali DD/MM/LLLL ali morda LLLLMMDD? In ali regionalne nastavitve igrajo tukaj vlogo?
MS Access, Jet, oblikovanje datuma in časa
Ko uporabljate Access in JET ( dbGo - ADO Delphi kontrole ) oblikovanje SQL za datumsko polje *vedno* bi moralo biti:
Karkoli drugega lahko deluje v omejenem testiranju, vendar lahko pogosto povzroči nepričakovane rezultate ali napake na uporabnikovem računalniku.
Tukaj je funkcija Delphi po meri, ki jo lahko uporabite za oblikovanje datumske vrednosti za poizvedbo Access SQL.
Za '29. januar 1973' bo funkcija vrnila niz '#1973-01-29#'.
Dostop do zapisa datuma in časa SQL?
Kar zadeva oblikovanje datuma in časa, je splošni format:
To je: #leto-mesec-danSPACEhour:minute:second#
Takoj, ko sestavite veljaven niz datuma in časa za SQL z uporabo zgornje splošne oblike in ga poskusite uporabiti s katero koli komponento nabora podatkov Delphi kot TADOQuery, boste prejeli grozno 'Parameterski objekt ni pravilno definiran. Zagotovljene so bile nedosledne ali nepopolne informacije. napaka pričas izvajanja!
Težava z zgornjim formatom je v znaku ':' - saj se uporablja za parametre v parametriziranih poizvedbah Delphi. Kot v '... WHERE DateField = :dateValue' - tukaj je 'dateValue' parameter in ':' se uporablja za njegovo označevanje.
Eden od načinov za 'odpravo' napake je uporaba druge oblike za datum/čas (zamenjajte ':' z '.'):
In tukaj je funkcija Delphi po meri za vrnitev niza iz vrednosti datuma in časa, ki jo lahko uporabite pri sestavljanju poizvedb SQL za Access, kjer morate iskati vrednost datuma in časa:
Oblika je videti čudna, vendar bo povzročila pravilno oblikovano vrednost niza datuma in časa, ki bo uporabljena v poizvedbah SQL!
Tukaj je krajša različica z uporabo rutine FormatDateTime: