Вместо да форматирате стойности като дати или низове в 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. Бях малко мързелив за обработката на датата, ако имате данни точно в полунощ, ще получите твърде много данни.