Saya tidak ingin menggunakan DSN karena saya menggunakan driver ODBC sebagai lawan dari OLE DB. Dengan mereferensikan DSN, kode di atas berfungsi dengan sangat sedikit perubahan.
Lihat pertanyaan ini untuk mengetahui bagaimana saya menemukan jawabannya setelah saya mulai mencurigai masalah OLE DB/ODBC.Apakah ADO bekerja dengan driver ODBC atau hanya penyedia OLE DB?
Kode Baru di sini:
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
Sistem DSN dikonfigurasi untuk menggunakan driver PostgreSQL Unicode. Saya memilih untuk tidak menggunakan OLE DB meskipun ada penyedia yang tersedia. Jika Anda melihat PGFoundry, Anda akan melihatnya memiliki banyak masalah dan belum diperbarui dalam beberapa tahun.