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
पी.एस. तारीख को संभालने के लिए थोड़ा आलसी था, अगर आपके पास ठीक आधी रात को डेटा है, तो आपको बहुत अधिक डेटा मिलेगा।