Delphi での Access SQL の日時値のフォーマット

オンラインカレンダープランナー

ゲッティイメージズ/チョッキックス





これまでひどい取得 ' パラメータ オブジェクトが正しく定義されていません。一貫性のない、または不完全な情報が提供されました ' JET エラー?状況を修正する方法は次のとおりです。

日付 (または日時) 値が使用されている Access データベースに対して SQL クエリを作成する必要がある場合は、正しい形式が使用されていることを確認する必要があります。



たとえば、SQL クエリ: 'SELECT * FROM TBL WHERE DateField = '10/12/2008'' では、一般的な日付フィールド DateField が 10/12/2008 に等しい TBL という名前のテーブルからすべてのレコードを取得する必要があります。

上の線は明確ですか?それは 12 月 10 日ですか、それとも 10 月 12 日ですか。幸いなことに、クエリの年が 2008 年であることはほぼ確実です。



クエリの日付部分は、MM/DD/YYYY または DD/MM/YYYY または YYYYMMDD として指定する必要がありますか?そして、地域設定はここで役割を果たしますか?

MS Access、Jet、日時のフォーマット

Access と JET を使用する場合 ( dbGo - ADO Delphi コントロール ) の SQL のフォーマット 日付フィールド *常に*する必要があります:

限定的なテストでは他の方法でも機能する可能性がありますが、多くの場合、ユーザーのマシンで予期しない結果やエラーが発生する可能性があります。

Access SQL クエリの日付値をフォーマットするために使用できるカスタム Delphi 関数を次に示します。



「1973 年 1 月 29 日」の場合、関数は文字列「#1973-01-29#」を返します。

SQL 日時形式にアクセスしますか?

日付と時刻の形式については、一般的な形式は次のとおりです。



これは: #年-月-日SPACE時:分:秒#

上記の一般的な形式を使用して SQL の有効な日時文字列を作成し、Delphi のデータセット コンポーネントのいずれかを TADOQuery として使用して試すとすぐに、ひどいメッセージが表示されます。 'パラメータ オブジェクトが正しく定義されていません。一貫性のない、または不完全な情報が提供されました」 エラーランタイム!



上記の形式の問題は、「:」文字にあります。これは、パラメータ化された Delphi クエリのパラメータに使用されるためです。 '... WHERE DateField = :dateValue' のように - ここで 'dateValue' はパラメーターであり、':' はそれをマークするために使用されます。

エラーを「修正」する 1 つの方法は、日付/時刻に別の形式を使用することです (「:」を「.」に置き換えます)。



また、日時値を検索する必要がある Access の SQL クエリを作成するときに使用できる、日時値から文字列を返すカスタム Delphi 関数を次に示します。

フォーマットは奇妙に見えますが、正しくフォーマットされた日時文字列値が SQL クエリで使用されるようになります!

FormatDateTime ルーチンを使用した短いバージョンを次に示します。