それともエラー回避のために念のためつけておくのが安牌でしょうか…。
RemoveDate
をDim RemoveDate As Date
と宣言している(date型で宣言している)ので「#」は必須です(ないと困ったことになります)
Dim d As Date
d = date
Debug.print d & ""
こういう処理(date型を文字列にして出力する)と
2021/04/08
日付(+時刻)っぽい文字に変わります
問題のコードも
strSQL = strSQL & "where 日時<#" & RemoveDate & "#"
が実際に処理されるときはRemoveDate
が日付っぽい文字に変わるのでそれをSQL文上での日付データとして扱うためには「#」で囲む必要があります。これを怠ると、例えば
where 日時<2021/4/8
のようなSQL文になるので、「2021/4/8」=「2021÷4÷8」=「63.15625」
where 日時<63.15625
が実行されます。やばいですね
ちなみにdate型というのはコンピュータの内部では数値データです。
Date Data Type (Visual Basic)
つまり、上のSQLは
where 日時<#1900/03/03 3:45:00#
と同じです。SQL構文として問題のない文なので動きます。でも、これでは意図した通りの結果は得られませんよね?ちょーやばいです。エラーを出してくれたほうがマシです
通報 ...