我遇到从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代码中设置它?
答案 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