vba和postgresql连接

时间:2014-03-20 11:54:21

标签: excel postgresql excel-vba vba

我遇到从VisualBasic(Excel)到postgresql的连接问题。 我这样定义我的连接:

Set ObjMyConn = New ADODB.Connection
ObjMyConn.ConnectionString = "Driver={PostgreSQL Unicode};Server=ip;Port=port;Database=db_name;Uid=user;Pwd=pass;"
ObjMyConn.Open

当我想用

将443532行加载到Excel中时
Set objMyCmd = New ADODB.Command
Set objMyCmd.ActiveConnection = ObjMyConn
objMyCmd.CommandText = "select * from table"
objMyCmd.CommandType = adCmdText
objMyCmd.Execute

它一直显示运行时错误读取元组时出现内存错误

我已将ODBC驱动程序升级到最新版本。我读了here我必须在某处设置使用declare / catch true (我猜是odbc驱动程序)。

是否可以在VB代码中设置它?

1 个答案:

答案 0 :(得分:2)

我相信您只需将UseDeclareFetch=1选项添加到连接字符串中,如下所示:

"Driver={PostgreSQL Unicode};Server=ip;Port=port;Database=db_name;Uid=user;Pwd=pass;UseDeclareFetch=1"

但是,如果这不起作用,还有另一种方法 - 如果您使用 ODBC数据库连接管理员设置了ODBC系统数据源,则可以直接修改注册表项(如果有的话)足够的权限)。

如果您使用的是系统DSN,则要更改的密钥位于HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\PostgreSQL35W下,以下vba代码将启用Use Declare/Fetch

Const HKEY_CURRENT_USER     = &H80000001
Const HKEY_LOCAL_MACHINE    = &H80000002

strComputer = "."

Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_
strComputer & "\root\default:StdRegProv")

strKeyPath = "SOFTWARE\ODBC\ODBC.INI\PostgreSQL35W"
strValueName = "UseDeclareFetch"
strStringValues = "1"

oReg.SetStringValue   HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strStringValues