sql >> データベース >  >> RDS >> PostgreSQL

VBAでADOを使用してPostgreSQLに接続する

    OLE DBではなくODBCドライバーを使用しているため、DSNは使用しません。 DSNを参照することにより、上記のコードはほとんど変更を加えることなく機能します。

    この問題に対するOLEDB/ ODBCを疑うようになった後、どのようにして答えを見つけたかについては、この質問を参照してください。 ADOはODBCドライバーで動作しますか、それともOLE DBプロバイダーのみで動作しますか?

    ここに新しいコード:

    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
    

    システムDSNは、PostgreSQLUnicodeドライバーを使用するように構成されています。利用可能なプロバイダーがあるにもかかわらず、OLEDBを使用しないことを選択しました。 PGFoundryを見ると、多くの問題があり、数年間更新されていないことがわかります。



    1. Oracle CloudPlatformでのMySQLデータベースサービスでのOracleJDeveloperの使用、パート2

    2. DBaaSフェイルオーバーソリューションと手動リカバリセットアップの比較

    3. 複数の行の最後に挿入されたIDを取得する

    4. MySQLから呼び出されたHTMLテーブルの行を並べ替える方法