Daripada memformat nilai seperti tanggal atau string ke dalam perintah SQL, lebih baik menggunakan ADODB.Parameter
- dalam hal ini pengemudi akan melakukan semua pekerjaan untuk Anda. Anda tidak perlu memperhatikan tanda kutip di sekitar string, memformat tanggal sehingga database memahaminya dengan benar (yang sangat bergantung pada database, pengaturan regional, dan sebagainya). Plus itu adalah perlindungan terhadap injeksi SQL. Selain itu, pengoptimal kueri dapat melakukan tugasnya dengan lebih baik karena mendapat perintah SQL yang sama setiap saat dan mengingat rencana eksekusi.
Kekurangan:kode get sedikit lebih rumit karena Anda harus melibatkan ADODB.command
objek.
Dalam pernyataan SQL Anda, Anda meletakkan ?
. sederhana di tempat di mana Anda ingin memiliki parameter. Anda hanya perlu memperhatikan bahwa angka dan posisi ?
dan parameter cocok.
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. Agak malas untuk penanganan tanggal, jika Anda memiliki data tepat di tengah malam, Anda akan mendapatkan terlalu banyak data.