Místo formátování hodnot, jako jsou data nebo řetězce do příkazu SQL, je mnohem lepší použít ADODB.Parameter
- v tom případě řidič udělá veškerou práci za vás. Nemusíte se starat o uvozovky kolem řetězce, formátování data tak, aby mu databáze správně rozuměla (což do značné míry závisí na databázi, regionálním nastavení a podobně). Navíc je to ochrana proti SQL injection. Optimalizátor dotazů navíc může dělat svou práci mnohem lépe, protože pokaždé dostane stejný příkaz SQL a pamatuje si plán provádění.
Nevýhoda:kód je trochu složitější, protože musíte zapojit ADODB.command
objekt.
Do příkazu SQL vložíte jednoduchý ?
na místě, kde chcete mít parametr. Musíte jen dbát na to, aby čísla a pozice ?
a parametry se shodují.
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. Byl trochu líný na zpracování data, pokud máte data přesně o půlnoci, dostali byste příliš mnoho dat.