日付や文字列などの値をSQLコマンドにフォーマットする代わりに、ADODB.Parameter
を使用することをお勧めします。 -その場合、ドライバーがすべての作業を行います。文字列を引用符で囲んだり、データベースが正しく理解できるように日付をフォーマットしたりする必要はありません(これは、データベースや地域の設定などに大きく依存します)。さらに、SQLインジェクションに対する保護です。さらに、クエリオプティマイザは、毎回同じSQLコマンドを取得し、実行プランを記憶しているため、より適切に機能します。
欠点:ADODB.command
を使用する必要があるため、コードは少し複雑になります オブジェクト。
SQLステートメントには、単純な?
を記述します。 パラメータを設定したい場所で。 ?
の番号と位置に注意する必要があります とパラメータが一致します。
Dim Conn As New ADODB.Connection, cmd As New ADODB.Command, param As ADODB.Parameter, rs As ADODB.Recordset
Conn.Open "<your connection string>"
Set cmd.ActiveConnection = Conn
cmd.CommandText = "SELECT cID FROM logistics WHERE DATE(insert_timestamp) BETWEEN ? AND ? GROUP BY 1"
Set param = cmd.CreateParameter(, adDate, adParamInput, , Date)
cmd.Parameters.Append param
Set param = cmd.CreateParameter(, adDate, adParamInput, , Date + 1)
cmd.Parameters.Append param
Set rs = cmd.Execute
Debug.Print rs.Fields(0).Name, rs(0).Value
P.S.日付の処理には少し怠惰でした。真夜中に正確にデータがあると、データが多すぎます。