मैं एक डीएसएन का उपयोग नहीं करना चाहता क्योंकि मैं ओएलई डीबी के विपरीत ओडीबीसी ड्राइवर का उपयोग कर रहा हूं। DSN को संदर्भित करके, उपरोक्त कोड बहुत कम परिवर्तनों के साथ काम करता है।
एक बार जब मुझे इस मुद्दे पर OLE DB/ODBC पर संदेह होने लगा, तो मुझे इसका उत्तर कैसे मिला, इसके लिए यह प्रश्न देखें।क्या ADO ODBC ड्राइवरों या केवल OLE DB प्रदाताओं के साथ काम करता है?
यहां नया कोड:
Sub GetCustomers()
Dim oConn As New ADODB.connection
Dim cmd As New ADODB.Command
' Connection Parameters
Dim strUsername As String
Dim strPassword As String
Dim strServerAddress As String
Dim strDatabase As String
' User:
strUsername = Sheets("CONFIG").Range("B4").Value
' Password:
strPassword = Sheets("CONFIG").Range("B5").Value
' Server Address:
strServerAddress = Sheets("CONFIG").Range("B6").Value
' Database
strDatabase = Sheets("CONFIG").Range("B3").Value
oConn.Open "DSN=my_system_dsn;" & _
"Database=" & strDatabase & ";" & _
"Uid=" & strUsername & ";" & _
"Pwd=" & strPassword
Set xlSheet = Sheets("CUSTOMERS")
xlSheet.Activate
Range("A3").Activate
Selection.CurrentRegion.Select
Selection.ClearContents
Range("A1").Select
Dim strSQL As String
strSQL = "SELECT * FROM customers"
cmd.CommandType = ADODB.CommandTypeEnum.adCmdText
cmd.ActiveConnection = oConn
cmd.CommandText = strSQL
Set rs = New ADODB.Recordset
Set rs = cmd.Execute
For i = 1 To rs.Fields.Count
ActiveSheet.Cells(3, i).Value = rs.Fields(i - 1).Name
Next i
xlSheet.Range(xlSheet.Cells(3, 1), _
xlSheet.Cells(3, rs.Fields.Count)).Font.Bold = True
ActiveSheet.Range("A4").CopyFromRecordset rs
xlSheet.Select
Range("A3").Select
Selection.CurrentRegion.Select
Selection.Columns.AutoFit
Range("A1").Select
rs.Close
oConn.Close
Set cmd = Nothing
Set param = Nothing
Set rs = Nothing
Set cnn = Nothing
Set xlSheet = Nothing
End Sub
सिस्टम DSN को PostgreSQL यूनिकोड ड्राइवर का उपयोग करने के लिए कॉन्फ़िगर किया गया है। प्रदाता उपलब्ध होने के बावजूद मैंने ओएलई डीबी का उपयोग नहीं करना चुना। अगर आप पीजीफाउंड्री को देखें, तो आप देखेंगे कि इसमें कई समस्याएं हैं और कई सालों से इसे अपडेट नहीं किया गया है।