整整折腾了一天,终于搞定了 ADO 的 80004005 错误,特写出来做个分享。
错误描述:
在程序中使用 ADO 对象连接 Access 数据库进行查询时,Recordset 的 Open 方法 Select 查询报错,显示为 Run-time error ‘-2147467259(80004005)’: Method ‘Open’ of object ‘_Recordset’ failed
换用 Command 的 Execute 方法同样报错。
检查 Select 语句未发现错误,在 MDB 文件中测试 Select 语句一切正常,程序中其他使用同样方法的语句都运行正常,联机帮助没有相关问题说明。
错误解决:
在网上搜索了半天,有说是权限、连接设置等问题的,但对我的问题均没有帮助。最后在一个论坛的一条回复中注意到提问者自己修改了某个字段的名称后问题解决,突然想到是不是 ADO 对象有保留的关键字。我的 Select 语句涉及到 PositionID 和 Position 两个字段,将 Position 字段改名为 PositionName 后,问题解决。
结论:
ADO 对象中有一些关键字,如果在 Select 语句中出现,就会引发 80004005 错误。
目前发现的关键字有 Position, Date,Time 等等,完整的列表还没发现。
另外,除了改名以外,还可以用加方括号[]的办法来避免关键字冲突。