VBAのSQLにて、ある日付より過去のデータは削除するようなコードを書きましたが思った結果が出てない事に気づき、日付の計算自体ができてない事がわかりました。
ココに注意
エラーが出ないのでデータを検証するまで分からない
という状況でした。
下記がシンプルにある日付より過去のデータは消すというSQL文になります。
dadd_dt = DateAdd("m", 1, DLookup("月次処理年月", "dbo_mst_月次", "終了確認='作業中'")) SQL = "DELETE dbo_product_running.* " '処理7(製品繰越データの削除)" SQL = SQL & "FROM dbo_product_running " SQL = SQL & "WHERE (dbo_product_running.納品日 < " & dadd_dt & " AND dbo_product_running.完納確認='完 納') " SQL = SQL & "OR (dbo_product_running.JNO Is Not Null " SQL = SQL & "AND dbo_product_running.納品日 < " & dadd_dt & ")" cmd.CommandText = SQL cmd.Execute
上のコードだと日付の計算がちゃんとされないようです。
dadd_dtという日付の変数をSQL内に挿入した方法が間違っていたのかとデバッグプリントで確認すると、
「2020/10/01」と半角にて日付が表示されます。
ココに注意
日付のように見えて日付のデータじゃないのか!?
ちゃんと計算できたコードの書き方は下記のようになりました。
dbo_product_running.納品日 < #" & dadd_dt & "#
つまり、
ココがポイント
#で挟む事が必要だったようです!
今更ですが、こんなことで悩むのですよね。
日付の比較計算等で思ったように計算がされてない場合は、#で挟んでみるという事も勉強になりました。