Apache Ignite ODBC与ADODB Recordset数据获取异常问题求助
在Windows 10系统下,使用32位Microsoft Access 2016及默认配置的32位Apache Ignite ODBC驱动,从Apache Ignite内存数据库获取记录。导入为链接表的方式无法生效,改用ADODB类尝试:Connection.Open与Recordset.Open执行成功,能在Recordset中看到示例表CITY的所有列(ID和NAME),但调用MoveFirst或MoveNext获取第一条记录时,出现错误提示“specified attribute is not supported”。尝试设置CursorLocation=adUseClient后,错误提示变为“wrong parameter”。当前默认Provider为MSDASQL.1,请问该Provider是否正确?有没有办法使用ADODB成功获取记录?
代码如下:
Public Sub QueryIgnite() Dim ADOrs As ADODB.Recordset Dim ADOcon As ADODB.Connection Set ADOcon = New ADODB.Connection ADOcon.ConnectionString = "DSN=Apache-Ignite-DSN" 'ADOcon.CursorLocation = adUseClient ADOcon.Open Set ADOrs = New ADODB.Recordset ADOrs.Open "select * from city", ADOcon, adOpenForwardOnly ADOrs.MoveNext Debug.Print ADOrs.Fields("NAME") ADOrs.Close ADOcon.Close End Sub
关于Provider的正确性
MSDASQL.1(ODBC驱动程序的OLE DB提供者)本身是正确的——通过ODBC DSN连接Apache Ignite时,MSDASQL作为标准桥接提供者是合理选择,问题大概率出在游标类型、锁类型的参数搭配,或者驱动对ADODB参数的支持限制上。
具体修改方案
调整Recordset.Open参数组合
Apache Ignite ODBC驱动对部分游标、锁类型支持有限,建议显式指定adOpenStatic游标类型与adLockReadOnly锁类型,修改后的代码如下:Public Sub QueryIgnite() Dim ADOrs As ADODB.Recordset Dim ADOcon As ADODB.Connection Set ADOcon = New ADODB.Connection ADOcon.ConnectionString = "DSN=Apache-Ignite-DSN" ' 保持默认服务器端游标,避免客户端游标兼容性问题 ADOcon.Open Set ADOrs = New ADODB.Recordset ' 显式指定兼容的游标与锁类型 ADOrs.Open "select * from city", ADOcon, adOpenStatic, adLockReadOnly If Not ADOrs.EOF Then ' 遍历所有记录的示例 Do While Not ADOrs.EOF Debug.Print ADOrs.Fields("NAME") ADOrs.MoveNext Loop End If ADOrs.Close ADOcon.Close Set ADOrs = Nothing Set ADOcon = Nothing End Sub检查ODBC驱动配置
打开32位ODBC数据源管理器(C:\Windows\SysWOW64\odbcad32.exe):- 验证Ignite节点地址、端口等配置是否正确
- 确认驱动为最新32位版本,旧版本可能存在ADODB兼容性缺陷
- 在管理器中测试连接并执行查询,排除驱动本身的连接故障
禁用客户端游标
设置adUseClient后出现参数错误,说明Ignite ODBC驱动不支持客户端游标模式,需保持默认的服务器端游标(adUseServer)。限制结果集大小(可选)
若表中数据量较大,可添加LIMIT语句缩小返回范围,测试是否能正常获取记录:ADOrs.Open "select * from city LIMIT 10", ADOcon, adOpenStatic, adLockReadOnly
内容的提问来源于stack exchange,提问作者Guido

