sql >> Databasteknik >  >> RDS >> PostgreSQL

Använder ADO i VBA för att ansluta till PostgreSQL

Jag vill inte använda ett DSN eftersom jag använder en ODBC-drivrutin i motsats till OLE DB. Genom att referera till ett DSN fungerar ovanstående kod med mycket få ändringar.

Se den här frågan för hur jag hittade svaret när jag började misstänka problemet med OLE DB/ODBC.Fungerar ADO med ODBC-drivrutiner eller bara OLE DB-leverantörer?

Ny kod här:

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

Systemets DSN är konfigurerat för att använda PostgreSQL Unicode-drivrutinen. Jag valde att inte använda OLE DB trots att det finns en leverantör tillgänglig. Om du tittar på PGFoundry kommer du att se att den har många problem och inte har uppdaterats på flera år.



  1. Hur dödar/stoppar man en lång SQL-fråga omedelbart?

  2. Hur stor är för stor för ett MySQL-bord?

  3. Räkna och gruppera icke-tomma värden i MySQL

  4. Bästa sättet att få resultaträkning innan LIMIT tillämpades