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

博主在使用Python的pypyodbc和pyodbc尝试连接Access2016数据库时遇到[HY000]错误,经过一系列尝试和排查,发现是数据库中某个表包含‘大型页码’数据类型导致的问题。通过替换该数据类型,成功解决了连接问题。提醒遇到类似问题的读者检查数据库中的特殊数据类型。
部署运行你感兴趣的模型镜像

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建了一个新数据库,唉,用上面的代码就可以正常连接,思路有了,感觉可能是这个将要打开的数据库有问题。

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

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

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

 

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

D:\anaconda\envs\pokemon-web\python.exe D:\pindex\index.py 2025-09-26 10:39:30,120 - ERROR - 数据库连接失败: ('HY000', "[HY000] [Microsoft][ODBC Microsoft Access Driver] 找不到文件 '(未知)'。 (-1811) (SQLDriverConnect); [HY000] [Microsoft][ODBC Microsoft Access Driver] 找不到文件 '(未知)'。 (-1811)") 2025-09-26 10:39:30,120 - INFO - 尝试创建新的Access数据库... 2025-09-26 10:39:30,784 - ERROR - 数据库创建失败: ('HY000', "[HY000] [Microsoft][ODBC Microsoft Access Driver] 找不到文件 '(未知)'。 (-1811) (SQLDriverConnect); [HY000] [Microsoft][ODBC Microsoft Access Driver]非法的连接串属性 CREATE_DB (8); [HY000] [Microsoft][ODBC Microsoft Access Driver]非法的连接串属性 CREATE_DB (8); [HY000] [Microsoft][ODBC Microsoft Access Driver]非法的连接串属性 CREATE_DB (8); [HY000] [Microsoft][ODBC Microsoft Access Driver]非法的连接串属性 CREATE_DB (8); [HY000] [Microsoft][ODBC Microsoft Access Driver]非法的连接串属性 CREATE_DB (8); [HY000] [Microsoft][ODBC Microsoft Access Driver]非法的连接串属性 CREATE_DB (8); [HY000] [Microsoft][ODBC Microsoft Access Driver]非法的连接串属性 CREATE_DB (8); [HY000] [Microsoft][ODBC Microsoft Access Driver]非法的连接串属性 CREATE_DB (8); [HY000] [Microsoft][ODBC Microsoft Access Driver]非法的连接串属性 CREATE_DB (8); [HY000] [Microsoft][ODBC Microsoft Access Driver]非法的连接串属性 CREATE_DB (8); [HY000] [Microsoft][ODBC Microsoft Access Driver]非法的连接串属性 CREATE_DB (8); [HY000] [Microsoft][ODBC Microsoft Access Driver]非法的连接串属性 CREATE_DB (8); [HY000] [Microsoft][ODBC Microsoft Access Driver]非法的连接串属性 CREATE_DB (8); [HY000] [Microsoft][ODBC Microsoft Access Driver]非法的连接串属性 CREATE_DB (8); [HY000] [Microsoft][ODBC Microsoft Access Driver] 找不到文件 '(未知)'。 (-1811)") Traceback (most recent call last): File "D:\pindex\index.py", line 49, in connect_to_access conn = pyodbc.connect(connection_str) pyodbc.Error: ('HY000', "[HY000] [Microsoft][ODBC Microsoft Access Driver] 找不到文件 '(未知)'。 (-1811) (SQLDriverConnect); [HY000] [Microsoft][ODBC Microsoft Access Driver] 找不到文件 '(未知)'。 (-1811)") During handling of the above exception, another exception occurred: Traceback (most recent call last): File "D:\pindex\index.py", line 416, in <module> crawler = PokemonCrawler(db_path=DB_PATH, image_dir=IMAGE_DIR) File "D:\pindex\index.py", line 39, in __init__ self.conn = self.connect_to_access() File "D:\pindex\index.py", line 57, in connect_to_access conn = pyodbc.connect(connection_str + ';CREATE_DB=VARCHAR(1)') pyodbc.Error: ('HY000', "[HY000] [Microsoft][ODBC Microsoft Access Driver] 找不到文件 '(未知)'。 (-1811) (SQLDriverConnect); [HY000] [Microsoft][ODBC Microsoft Access Driver]非法的连接串属性 CREATE_DB (8); [HY000] [Microsoft][ODBC Microsoft Access Driver]非法的连接串属性 CREATE_DB (8); [HY000] [Microsoft][ODBC Microsoft Access Driver]非法的连接串属性 CREATE_DB (8); [HY000] [Microsoft][ODBC Microsoft Access Driver]非法的连接串属性 CREATE_DB (8); [HY000] [Microsoft][ODBC Microsoft Access Driver]非法的连接串属性 CREATE_DB (8); [HY000] [Microsoft][ODBC Microsoft Access Driver]非法的连接串属性 CREATE_DB (8); [HY000] [Microsoft][ODBC Microsoft Access Driver]非法的连接串属性 CREATE_DB (8); [HY000] [Microsoft][ODBC Microsoft Access Driver]非法的连接串属性 CREATE_DB (8); [HY000] [Microsoft][ODBC Microsoft Access Driver]非法的连接串属性 CREATE_DB (8); [HY000] [Microsoft][ODBC Microsoft Access Driver]非法的连接串属性 CREATE_DB (8); [HY000] [Microsoft][ODBC Microsoft Access Driver]非法的连接串属性 CREATE_DB (8); [HY000] [Microsoft][ODBC Microsoft Access Driver]非法的连接串属性 CREATE_DB (8); [HY000] [Microsoft][ODBC Microsoft Access Driver]非法的连接串属性 CREATE_DB (8); [HY000] [Microsoft][ODBC Microsoft Access Driver]非法的连接串属性 CREATE_DB (8); [HY000] [Microsoft][ODBC Microsoft Access Driver] 找不到文件 '(未知)'。 (-1811)") 进程已结束,退出代码为 1
最新发布
09-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值