その理由は、Microsoft Access が実際にDateTime
特定の方法を読み取る方法にあります。連結を使用すると、問題が発生する可能性があります。
アクセスは、次の方法でのみ日付/時刻を保存できます。
- 有効な日付: -657,434 (西暦 100 年 1 月 1 日) から 2,958,465 (西暦 9999 年 12 月 31 日)
- 有効時間: .0 (00:00:00) から .99999 (23:59:59)
次の方法でフォーマットできます。
- 格納された値 (倍数) = デフォルトの形式 (一般的な日付) = カスタム形式
- 36296.0 = 99/5/15 = 1999/05/15 12:00:00 AM
したがって、Microsoft Access の制限に留意する必要があります。SQL は日付をわずかに異なる方法で読み取り、それらをわずかに異なる方法で格納できるためです。コンテキストのわずかな中断が、結果に大きく影響する可能性があります。
最も簡単な方法は、 Parameters に基づいてクエリを実行することです。そうすれば、Access の無効な構文を連結しない可能性があります。これにより、いくつかの問題が軽減されます。
ネイティブ アクセスでは、次の関数を利用します。
関連する日付を時間比較に追加します。
var1 = #1/1/99 2:01:00 PM#
var2 = DateAdd("n", 10, var1)
? var2 = #1/1/99 2:11:00 PM#
Convert the time values to string data types before you compare them:
var1 = #2:01:00 PM#
var2 = DateAdd("n", 10, var1)
? CStr(var2) = CStr(#2:11:00 PM#)
DateDiff() 関数を使用して、秒などの正確な単位を比較します。
var1 = #2:01:00 PM#
var2 = DateAdd("n", 10, var1)
? DateDiff("s", var2, #2:11:00 PM#) = 0
したがって、ネイティブアクセス クエリは次のようになります。
UPDATE [dbo].[Customer]
SET [dbo].[Customer].[InvoiceDate] = #1/1/99 2:11:00 PM#;
ご覧のとおり、SQL のように機能しようとしますが、SQL ではありません。したがって、パラメーター ベースのクエリを作成することにより、有効な構文が Access データベースに実装されていることを確認できます。Steve が素晴らしい例を投稿したので、コード例は投稿しません。しかし、これがそれらの違いを理解するのに役立つことを願っています。