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

4

我正在尝试从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 Object Library OLE Automation Microsoft Office 14.0 Object Library Microsoft Forms 2.0 Object Library Microsoft Access 14.0 Object Library Microsoft ADO Ext. 6.0 for DOL and Security Microsoft ActiveX Data Objects 2.8 Library Microsoft Windows Common Confrols 6.0 (SP6)
执行测试方法TestPostgresConnection时,我收到了“[Miscrosoft] [ODBC驱动程序管理器]找不到数据源名称,也没有指定默认驱动程序”的错误消息。
我的postgres设置是标准的,我只是按照他们网站上的说明创建了一个本地RDBMS进行测试。
有人能告诉我为什么我不能连接和运行查询吗?到目前为止,没有任何解决方案奏效。谢谢。

您能否使用标准的Postgres工具连接到数据库?如需进一步排除故障,请创建一个扩展名为.UDL的空文本文件并双击它,然后填写postgres的详细信息 - 它是否有效? - Nick.McDermaid
我已经发现了问题并解决了它。在从PostgreSQL网站下载Postgres ANSI驱动程序后,问题得以解决。这是在查看此处SQLLite连接要求时引起我的注意 http://www.codeproject.com/Articles/586361/UsingplusanplusAccess-2cplusMySQL-2cplusPostgreSQL。谢谢@ElectricLlama - Judy007
1个回答

0

我的回答是一般性的回答。回馈社区,所以请友善。我有一个类似的问题,我使用以下方法进行设置。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接