Formatowanie wartości daty i godziny dla Access SQL w Delphi
Getty Images/chokkicx
Kiedykolwiek zdarzyło Ci się strasznie Obiekt parametru jest nieprawidłowo zdefiniowany. Podano niespójne lub niepełne informacje Błąd JET? Oto jak naprawić sytuację.
Kiedy musisz utworzyć zapytanie SQL do bazy danych Access, w której używana jest wartość daty (lub godziny), musisz upewnić się, że zostało użyte prawidłowe formatowanie.
Na przykład w zapytaniu SQL: 'SELECT * FROM TBL WHERE DateField = '10/12/2008' chcesz pobrać wszystkie rekordy z tabeli o nazwie TBL, gdzie ogólne pole daty DateField jest równe 10/12/2008.
Czy powyższa linia jest wyraźna? Czy to jest 10 grudnia czy 12 października? Na szczęście jesteśmy prawie pewni, że w zapytaniu pojawił się rok 2008.
Czy data w zapytaniu powinna być określona jako MM/DD/RRRR lub DD/MM/RRRR czy może RRRRMMDD? I czy ustawienia regionalne odgrywają tutaj rolę?
MS Access, Jet, formatowanie daty i godziny
Podczas korzystania z programu Access i JET ( dbGo - sterowanie ADO Delphi ) formatowanie SQL dla pole daty powinno *zawsze* być:
Wszystko inne może działać w ograniczonych testach, ale często może prowadzić do nieoczekiwanych wyników lub błędów na komputerze użytkownika.
Oto niestandardowa funkcja Delphi, której możesz użyć do sformatowania wartości daty dla zapytania Access SQL.
W przypadku „29 stycznia 1973” funkcja zwróci ciąg „#1973-01-29#”.
Uzyskiwać dostęp do formatu daty i godziny SQL?
Jeśli chodzi o formatowanie daty i godziny, ogólny format to:
To jest: #rok-miesiąc-dzieńSPACEgodzina:minuta:sekunda#
Jak tylko utworzysz prawidłowy ciąg daty i godziny dla SQL przy użyciu powyższego ogólnego formatu i wypróbujesz go z dowolnym komponentem zestawu danych Delphi jako TADOQuery, otrzymasz okropne 'Obiekt parametru jest nieprawidłowo zdefiniowany. Podano niespójne lub niekompletne informacje” błąd wczas wykonywania!
Problem z powyższym formatem tkwi w znaku ':' - jak to jest używane dla parametrów w zapytaniach Delphi parametrycznych. Jak w '... WHERE DateField = :dateValue' - tutaj 'dateValue' jest parametrem, a ':' służy do jego oznaczenia.
Jednym ze sposobów „naprawienia” błędu jest użycie innego formatu daty/godziny (zamień „:” na „.”):
A oto niestandardowa funkcja Delphi, która zwraca ciąg z wartości daty i godziny, której można użyć podczas konstruowania zapytań SQL dla programu Access, w których należy wyszukać wartość daty i godziny:
Format wygląda dziwnie, ale spowoduje, że w zapytaniach SQL zostanie poprawnie sformatowana wartość ciągu daty i godziny!
Oto krótsza wersja wykorzystująca procedurę FormatDateTime: