vba和postgresql连接
我有从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驱动程序升级到最新版本。 我在这里读到,我必须设置使用declare / catch在某处真实 (odbc驱动程序,我猜)。
是否有可能在VB代码中设置?
我相信你可以添加UseDeclareFetch=1
选项到连接string,如下所示:
"Driver={PostgreSQL Unicode};Server=ip;Port=port;Database=db_name;Uid=user;Pwd=pass;UseDeclareFetch=1"
但是,如果这不起作用,还有另一种方法 – 如果使用ODBC数据库连接pipe理器设置了ODBC系统数据源,则可以直接修改registry项(前提是您拥有足够的权限)。
要更改的密钥位于HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\PostgreSQL35W
如果您使用的是系统DSN,并且以下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