Istället för att formatera värden som datum eller strängar i SQL-kommandot är det mycket bättre att använda ADODB.Parameter
- i så fall kommer föraren att göra allt arbete åt dig. Du behöver inte bry dig om citattecken runt en sträng, formatera ett datum så att databasen förstår det korrekt (vilket är mycket beroende av databas, regionala inställningar och så vidare). Dessutom är det ett skydd mot SQL-injektion. Dessutom kan frågeoptimeraren göra sitt jobb mycket bättre eftersom den får samma SQL-kommando varje gång och kommer ihåg exekveringsplanen.
Nackdel:koden blir lite mer komplicerad eftersom du måste involvera en ADODB.command
objekt.
I din SQL-sats lägger du en enkel ?
på den plats där du vill ha en parameter. Du måste bara se till att siffrorna och positionen för ?
och parametrar matchar.
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. Var lite lat för datumhanteringen, har man data exakt vid midnatt skulle man få för mycket data.