sql >> Database teknologi >  >> RDS >> PostgreSQL

Brug af ADO i VBA til at oprette forbindelse til PostgreSQL

Jeg vil ikke bruge en DSN, da jeg bruger en ODBC-driver i modsætning til OLE DB. Ved at henvise til et DSN fungerer ovenstående kode med meget få ændringer.

Se dette spørgsmål for, hvordan jeg fandt svaret, da jeg begyndte at mistænke OLE DB/ODBC for problemet.Virker ADO med ODBC-drivere eller kun OLE DB-udbydere?

Ny kode her:

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

System-DSN er konfigureret til at bruge PostgreSQL Unicode-driveren. Jeg valgte ikke at bruge OLE DB selvom der er en udbyder tilgængelig. Hvis du ser på PGFoundry, vil du se, at den har mange problemer og ikke er blevet opdateret i flere år.



  1. Groovy Oracle Stored Proc - ugyldigt kolonneindeks

  2. ORA-01427:Enkeltrække-underforespørgsel returnerer mere end én række

  3. Symfony3 - SQLSTATE[HY000] [2002] Ingen sådan fil eller mappe

  4. Flere rækker returnerede, da de forsøgte at vælge en bestemt række i Oracle SQL