जब यह वीबीए कोड रिकॉर्डसेट को खोलने का प्रयास करता है, तो मुझे निम्न त्रुटि मिलती है: रन टाइम एरर '3709' इस ऑपरेशन को करने के लिए कनेक्शन का उपयोग नहीं किया जा सकता है। इस संदर्भ में यह, या तो बंद अथवा अमान्य है।
Set objMyConn = New ADODB.Connection
Set objMyRecordset = New ADODB.Recordset
Dim strSQL As String
objMyConn.ConnectionString = "Driver={SQL Server};Server=localhost\SQLEXPRESS;Database=Contact;Trusted_Connection=True;"
objMyConn.Open
strSQL = "Select * from Contact where Lastname like " + Chr(39) + LastSearch + "%" + Chr(39) + " And Firstname like " + Chr(39) + FirstSearch + "%" + Chr(39)
MsgBox strSQL
objMyRecordset.Open strSQL, cnn, adOpenForwardOnly, adLockOptimistic
2 जवाब
अपने मॉड्यूल के शीर्ष पर Option Explicit
जोड़ें; आप वीबीई को उस अघोषित cnn
चर पर चिल्लाते हुए पाएंगे।
आपका रिकॉर्डसेट किसी भी खुले कनेक्शन का उपयोग नहीं कर रहा है - जैसा कि त्रुटि संदेश कह रहा है।
उस ने कहा कि आप स्ट्रिंग अक्षर के अंदर सिंगल कोट्स बहुत अच्छी तरह से कर सकते हैं; वह Chr(39)
सामान बेकार ढंग से कोड को खराब कर रहा है।
इसके बजाय पैरामीटर का उपयोग करने पर भी विचार करें। यदि आप सुनिश्चित नहीं हैं, तो लिटिल बॉबी टेबल्स के बारे में पढ़ें।
यहाँ एक उदाहरण है:
Option Explicit
Sub Test()
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
conn.ConnectionString = "Provider='SQLOLEDB';Data Source='INSTANCE NAME';Initial Catalog='DATABASE NAME';Integrated Security='SSPI';"
conn.Open
Dim sql As String
sql = "SELECT Field1 FROM dbo.TestTable WHERE Field3 LIKE '%' + ? + '%'"
Dim results As ADODB.Recordset
With New ADODB.Command
.ActiveConnection = conn
.CommandType = adCmdText
.CommandText = sql
.Parameters.Append .CreateParameter(Type:=adVarChar, Value:="foo", Size:=255)
Set results = .Execute
End With
Debug.Print results(0).Name, results(0).Value
results.Close
conn.Close
End Sub
ध्यान दें कि यह Command
है जो Connection
को निष्पादित करता है और रिटर्न a Recordset
करता है।
यहाँ सामान्य ADODB कनेक्शन सेट अप है
Dim con As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strConnection As String
strConnection = "connectionString"
con.Open strConnection
rs.Open "SELECT * FROM Tbl", con
नए सवाल
vba
अनुप्रयोगों के लिए विजुअल बेसिक (VBA) मैक्रो लिखने के लिए एक इवेंट-संचालित, ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषा है, जिसका उपयोग पूरे ऑफिस सूट के साथ-साथ अन्य अनुप्रयोगों के लिए भी किया जाता है। VBA VB.NET, या VBS के बराबर नहीं है; यदि आप Visual Studio उपयोग [vb.net] में काम कर रहे हैं। यदि आपका प्रश्न विशेष रूप से किसी एमएस ऑफिस एप्लिकेशन को प्रोग्रामिंग करने के बारे में है, तो उपयुक्त टैग का भी उपयोग करें: [एक्सेल], [एमएस-एक्सेस], [एमएस-वर्ड], [आउटलुक], या [एमएस-प्रोजेक्ट]।