我正在尝试从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进行测试。
有谁能告诉我为什么我无法连接并运行查询? 到目前为止,这些解决方案都没有奏效。谢谢。
答案 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机器上的文件。您的路径格式可能有所不同。