sql >> Databáze >  >> RDS >> PostgreSQL

Použití ADO ve VBA pro připojení k PostgreSQL

Nechci používat DSN, protože používám ovladač ODBC na rozdíl od OLE DB. Při odkazování na DSN funguje výše uvedený kód s velmi malým počtem změn.

Podívejte se na tuto otázku, jak jsem našel odpověď, když jsem začal mít podezření na OLE DB/ODBC na problém.Funguje ADO s ovladači ODBC nebo pouze s poskytovateli OLE DB?

Nový kód zde:

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

Systémové DSN je nakonfigurováno pro použití ovladače PostgreSQL Unicode. Rozhodl jsem se nepoužívat OLE DB, i když je k dispozici poskytovatel. Když se podíváte na PGFoundry, uvidíte, že má mnoho problémů a nebylo několik let aktualizováno.



  1. Mysql INSERT IGNORE, pokud již existují konkrétní hodnoty řádku ve dvou sloupcích

  2. Oprava Msg 8116 „Datový typ argumentu varchar je neplatný pro argument 1 funkce session_context“ v SQL Server

  3. Syntaxe dotazu PostgreSQL LEFT OUTER JOIN

  4. Facebook user_id :big_int, int nebo string?