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

时间:2014-02-20 00:27:38

标签: sql postgresql excel-vba vba excel

我正在尝试从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。 DOL和安全6.0 Microsoft ActiveX数据对象2.8库 Microsoft Windows Common Confrols 6.0(SP6)

当我执行此测试方法TestPostgresConnection时,我得到“[Miscrosoft] [ODBC驱动程序管理器]未找到数据源名称且未指定默认驱动程序”

我对postgres的设置是标准的,我只是按照他们网站上的说明创建一个本地RDBMS进行测试。

有谁能告诉我为什么我无法连接并运行查询? 到目前为止,这些解决方案都没有奏效。谢谢。

1 个答案:

答案 0 :(得分:-1)

我的回答是一般答案。回馈社区。所以要好。我有一个类似的问题,我使用以下内容进行设置。

注意:我建议使用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 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机器上的文件。您的路径格式可能有所不同。