【发布时间】:2012-02-02 18:05:50
【问题描述】:
我无法找到使用 VBA ADO 从 Excel 连接到 PostgreSQL 数据库的清晰可靠的示例。诚然,我是 VBA 新手,大多数示例和教程都非常以 Access 或 MSSQL 为中心。 (我主要使用 Ruby、Rails、Perl 和 PostgreSQL。)
我正在寻找代码来连接并返回一个简单的查询 (SELECT * FROM customers;) 到 Excel 工作表。连接参数(服务器 ip、用户、密码、数据库)位于单独工作表的单元格中。
感谢您的帮助和耐心。
代码:
Sub ConnectDatabaseTest()
Dim cnn As ADODB.connection
Dim cmd As ADODB.Command
Dim param As ADODB.Parameter
Dim xlSheet As Worksheet
Dim rs As ADODB.Recordset
Dim sConnString As String
Dim i As Integer
' Connection Parameters
Dim strUsername As String
Dim strPassword As String
Dim strServerAddress As String
Dim strDatabase As String
' User:
strUsername = Sheets("CONFIG").Range("B4").Value
' Password:
strPassword = Sheets("CONFIG").Range("B5").Value
' Server Address:
strServerAddress = Sheets("CONFIG").Range("B6").Value
' Database
strDatabase = Sheets("CONFIG").Range("B3").Value
Set xlSheet = Sheets("TEST")
xlSheet.Activate
Range("A3").Activate
Selection.CurrentRegion.Select
Selection.ClearContents
Range("A1").Select
Set cnn = New ADODB.connection
sConnString = "DRIVER={PostgreSQL Unicode};DATABASE=" & strDatabase & ";SERVER=" & strServerAddress & _
";UID=" & strUsername & ";PWD=" & strPassword
cnn.Open sConnString
cmd.ActiveConnection = cnn
Dim strSQL As String
strSQL = "SELECT * FROM customers"
cmd.CommandType = ADODB.CommandTypeEnum.adCmdText
cmd.ActiveConnection = cnn
cmd.CommandText = strSQL
...
这里好像坏了:cmd.ActiveConnection = cnn
编辑:添加示例代码。
编辑:sConnString 设置为:
DRIVER={PostgreSQL35W};DATABASE=my_database;SERVER=1.2.3.4;UID=analyst;PWD=sekrit
更新 2/7:我更改了连接字符串中的“驱动程序”参数:
sConnString = "DRIVER={PostgreSQL Unicode};DATABASE=" & strDatabase & ";SERVER=" & strServerAddress & _
";UID=" & strUsername & ";PWD=" & strPassword & ";"
...我得到一个不同的错误:'运行时错误 91:对象变量或未设置块变量'
嗯。想法?
【问题讨论】:
-
您为其他数据库找到的任何示例都应该几乎可以按原样使用,但前提是您需要不同的连接字符串。您需要哪一个取决于您安装的驱动程序。 connectionstrings.com/postgre-sql
-
是的,你会这么想。到目前为止,我还没有取得任何成功。在此期间我会继续努力。
-
如果您有尝试过的代码,请编辑您的问题以包含该代码,并包含您收到的任何错误消息的详细信息。
-
完成。往上看。谢谢。
-
B4:B7 中的值是什么?您检查过 sConnString 构建后的样子吗?也许把它全部写回一个单元格,这样你就可以检查整个事情是否有语法错误?
标签: postgresql excel odbc ado vba