Thay vì định dạng các giá trị như ngày tháng hoặc chuỗi vào lệnh SQL, tốt hơn là sử dụng ADODB.Parameter
- trong trường hợp đó người lái xe sẽ làm tất cả công việc cho bạn. Bạn không cần phải quan tâm đến các dấu ngoặc kép xung quanh một chuỗi, định dạng ngày tháng để cơ sở dữ liệu hiểu nó một cách chính xác (điều này phụ thuộc nhiều vào cơ sở dữ liệu, cài đặt vùng, v.v.). Thêm vào đó, nó là một biện pháp bảo vệ chống lại SQL injection. Ngoài ra, trình tối ưu hóa truy vấn có thể thực hiện công việc tốt hơn nhiều vì nó nhận được cùng một lệnh SQL mọi lúc và ghi nhớ kế hoạch thực thi.
Nhược điểm:mã nhận được phức tạp hơn một chút vì bạn phải liên quan đến ADODB.command
đối tượng.
Trong câu lệnh SQL của mình, bạn đặt một ?
đơn giản tại nơi bạn muốn có một tham số. Bạn chỉ cần quan tâm đến các con số và vị trí của ?
và các thông số phù hợp.
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. Hơi lười biếng trong việc xử lý ngày tháng, nếu bạn có dữ liệu chính xác vào lúc nửa đêm, bạn sẽ nhận được quá nhiều dữ liệu.