PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Verwenden von ADO in VBA zum Herstellen einer Verbindung zu PostgreSQL

Ich möchte keinen DSN verwenden, da ich einen ODBC-Treiber im Gegensatz zu OLE DB verwende. Durch Verweis auf einen DSN funktioniert der obige Code mit sehr wenigen Änderungen.

Sehen Sie sich diese Frage an, um zu erfahren, wie ich die Antwort gefunden habe, als ich anfing, OLE DB/ODBC für das Problem zu vermuten. work-with-odbc-drivers-or-only-ole-db-providers">Funktioniert ADO mit ODBC-Treibern oder nur mit OLE DB-Providern?

Neuer Code hier:

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

Der System-DSN ist für die Verwendung des PostgreSQL-Unicode-Treibers konfiguriert. Ich habe mich entschieden, OLE DB nicht zu verwenden, obwohl ein Anbieter verfügbar ist. Wenn Sie sich PGFoundry ansehen, werden Sie feststellen, dass es viele Probleme hat und seit mehreren Jahren nicht mehr aktualisiert wurde.