繁体   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