簡體   English   中英

如何將VBA連接到postgreSQL並運行查詢

[英]How to connect VBA to postgreSQL and run query

我試圖從Microsoft Excel應用程序運行查詢,但無法成功連接。 我在我的本地機器上有PostgreSQL 9.3,並且運行64位Windows 7.我有一個示例數據庫名稱dvdrental,它是一個演示數據庫。 我只需要連接到數據庫,運行查詢,並在我的工作表中查看輸出(或立即窗口,任一個解決連接問題)。 到目前為止,這是我的工作。

Option Explicit
Public objConnection As ADODB.Connection 
Public strConnection As String

Public Sub TestPostgresConnection()
Dim strConnection As String
strConnection = "Driver={PostgreSQL Unicode};Server=localhost;Port=5432;   Database=dvdrental;UID=sa;PWD=wrox;"
Set objConnection = New ADODB.Connection
Set objRecordSet = New ADODB.Recordset
objConnection.Open strConnection
With objRecordSet
    .ActiveConnection = objConnection
    .Open "SELECT * FROM actor"
End With
Do While Not objRecordSet.EOF
    Debug.Print objRecordSet.Fields(0).Value
    objRecordSet.MoveNext
Loop
objRecordSet.Close
objConnection.Close
Set objRecordSet = Nothing
Set objConnection = Nothing
End Sub

這是我的參考文獻清單;

Visual Basic for Applications Microsoft Excel 14.0對象庫OLE自動化Microsoft Office 14.0對象庫Microsoft Forms 2.0對象庫Microsoft Access 14.0對象庫Microsoft ADO Ext。 6.0用於DOL和安全性Microsoft ActiveX數據對象2.8庫Microsoft Windows Common Confrols 6.0(SP6)

當我執行此測試方法TestPostgresConnection時,我得到“[Miscrosoft] [ODBC驅動程序管理器]數據源名稱未找到且未指定默認驅動程序”

我的postgres設置是標准的,我只是按照他們網站上的指示創建一個本地RDBMS進行測試。

誰能告訴我為什么我無法連接並運行查詢? 到目前為止,這些解決方案都沒有奏效。 謝謝。

我的回答是一般答案。 回饋社區。 所以要好。 我有一個類似的問題,我使用以下設置它。

注意:我建議使用DSN而不是驅動程序,然后您可以使用已具有密碼的命名連接,而不是在代碼中使用密碼。

這些說明一般都是一個巨大的幫助: http//www.dashbay.com/2011/03/working-with-postgres-on-windows-via-odbc/

上面鏈接中的下載鏈接對我不起作用。 我在這里找到了ODBC下載: https ://www.postgresql.org/ftp/odbc/versions/msi/我想我下載了這個:psqlodbc_09_05_0400-x86.zip

我使用Konstantin的答案從此鏈接獲取%WINDIR%\\ SysWOW64 \\ odbcad32.exe: Windows 7上的PostgresSQL ODBC驅動程序未顯示

我還在這里下載了MS Power Query,我覺得這很有幫助: https//www.microsoft.com/en-us/download/details.aspx?id = 39379

如果我要補充澄清,我很樂意編輯我的答案。

下面是查詢的子項,下面是一個演示如何使用它的子。

Sub CcQueryPg(sSql As String, Optional sOdbcName As String = "ConnectionNameHere")


'Declare a Connection object
Dim cnDB As New ADODB.Connection

'Declare a Recordset Object
Dim rsRecords As New ADODB.Recordset

'Open the ODBC Connection using this statement
cnDB.Open sOdbcName
rsRecords.Open sSql, cnDB

'Close everything and set the references to nothing
rsRecords.Close
Set rsRecords = Nothing
cnDB.Close
Set cnDB = Nothing
End Sub

Sub SendQuery()

Call CcQueryPg("COPY  sometablenamehere FROM    '/mnt/somepathhere/somefilename.csv' DELIMITER ',' CSV HEADER;")

End Sub

上面的文件引用是Linux機器上的文件。 您的路徑格式可能不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM