如何将VBA连接到PostgreSQL并运行查询

x8diyxa7  于 2023-01-12  发布在  PostgreSQL
关注(0)|答案(1)|浏览(340)

我正在尝试从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应用程序版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通用控件6.0(SP6)
当我执行这个测试方法TestPostgresConnection时,我得到“[Miscrosoft][ODBC驱动程序管理器]未找到数据源名称并且未指定默认驱动程序”
我对Postgres的设置一直是标准的,我只是简单地按照他们网站上的指示创建一个本地RDBMS进行测试。
谁能告诉我为什么我不能连接并运行查询?到目前为止,没有一个解决方案起作用。谢谢。

wfsdck30

wfsdck301#

我的答案是一个一般性的答案。回馈社区。所以要友善。我有一个类似的问题,我用下面的来设置它。
注意:我建议使用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:PostgresSQL ODBC Drivers on Windows 7 not showing up
我还在这里下载了MS Power Query,我发现它很有帮助:https://www.microsoft.com/en-us/download/details.aspx?id=39379
如果我需要澄清,我很乐意修改我的答复。
下面是查询的sub,再下面是演示如何使用它的sub。

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机器上的文件。您的路径格式可能不同。

相关问题