python 操作 access 2016报 [HY000] [Microsoft][ODBC Microsoft Access Driver]General error Unable to open

python 操作 access 2016报 [HY000] [Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for...

      这两天开发python 访问microsoft access 2016时,无论用pypyodbc,还是用pyodbc都连接不上access 2016数据库,查了一堆资料,尝试重装AccessDatabaseEngine引擎,无论是安装32位的,还是64位的,不断的在windows 内修改odbc32还是64位数据源,都无法解决问题。但突然发现,如果用access 2016新建的一个数据库,就可以connect,想到数据库可能有哪儿不兼容导致的,顺着这个思路,终于解决该问题,前后耗了将近一周的时间,记录在这儿,供大家解决类似问题时参考。

一、开发环境

windows 8 64位操作系统,pyghon 3.8.6, microsoft access 2016 32位,安装的AccessDatabaseEngine 32位访问引擎。连接的数据库在access 2016内能正常打开,但在python内无法建立连接,代码如下:

import pypyodbc

str = r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\\test\old.accdb;'
db=pypyodbc.connect(str)                 # 打开数据库连接

cursor = db.cursor()
SQL = "SELECT top 1 * from users;"
for row in cursor.execute(SQL):
    print(row)
cursor.close()

运行后,一直报

Error: ('HY000', "[HY000] [Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 0x1c44 Thread 0x1d50 DBC 0x1c6c5f3c Jet'.")

二、在百度上,一顿操作猛如虎,绐终解决不了问题,一直怀疑是不是access 2016或python 的pypyodbc或pyodbc有问题。

三、偶而用Access 2016建了一个新数据库,唉,用上面的代码就可以正常连接,思路有了,感觉可能是这个将要打开的数据库有问题。

四、尝试将原数据库的表一个一个删除,不断测试,当然,删除表后要压缩下数据库,删除一些无用的空间(这步很重要,不做这步有可能还是打不开)。终于发现是某个表内用了一个"大型页码"的数据类型,将该类型换成其它数据类型,就可以正常打开了。就是这样一个小小问题,卡了我将近一周时间。

到现在我也没有查到这个"大型页码"数据类型是怎么一回事。

如与我一样有碰到上面问题,可以供大家一点参考。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值