PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Utiliser ADO dans VBA pour se connecter à PostgreSQL

Je ne veux pas utiliser de DSN car j'utilise un pilote ODBC par opposition à OLE DB. En faisant référence à un DSN, le code ci-dessus fonctionne avec très peu de changements.

Voir cette question pour savoir comment j'ai trouvé la réponse une fois que j'ai commencé à suspecter OLE DB/ODBC du problème. work-with-odbc-drivers-or-only-ole-db-providers">ADO fonctionne-t-il avec les pilotes ODBC ou uniquement les fournisseurs OLE DB ?

Nouveau code ici :

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

Le DSN système est configuré pour utiliser le pilote Unicode PostgreSQL. J'ai choisi de ne pas utiliser OLE DB même s'il existe un fournisseur disponible. Si vous regardez PGFoundry, vous verrez qu'il a de nombreux problèmes et qu'il n'a pas été mis à jour depuis plusieurs années.