【问题标题】:How to connect VBA to postgreSQL and run query如何将 VBA 连接到 postgreSQL 并运行查询
【发布时间】:2014-03-20 16:15:16
【问题描述】:

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

当我执行这个测试方法TestPostgresConnection,我得到“[Miscrosoft][ODBC Driver Manager] Data source name not found and no default driver specified”

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

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

【问题讨论】:

  • 您是否能够使用标准 Postgres 工具连接到数据库?要进一步排除故障,请创建一个扩展名为 .UDL 的空白文本文件并双击它,填写 postgres 的详细信息 - 是否有效?
  • 我发现了这个问题,并且已经解决了这个问题。从 PostgreSQL 网站下载 Postgres ANSI 驱动程序后,该问题得到解决。在查看了此处codeproject.com/Articles/586361/… 的 SQLLite 连接要求后,我注意到了这一点。谢谢@ElectricLlama

标签: sql postgresql excel vba


【解决方案1】:

我的回答是一般性的回答。回馈社会。所以要乖一点。我有一个类似的问题,我使用以下方法进行设置。

注意:我建议使用 DSN 而不是驱动程序,然后您可以使用已经有密码的命名连接,而不是在代码中使用密码。

这些说明通常提供了巨大的帮助: http://www.dashbay.com/2011/03/working-with-postgres-on-windows-via-odbc/

上面链接中的下载链接对我不起作用。我在这里找到了 ODBC 下载: https://www.postgresql.org/ftp/odbc/versions/msi/ 我想我下载了这个: sqlodbc_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 机器上的一个文件。您的路径格式可能不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    相关资源
    最近更新 更多