使用pyodbc连接到MS Access 2007 (.accdb)数据库

9
我正在使用Win7 x64,Python 2.7.1 x64。我正在将我创建的VC++应用程序移植到Python以供教育目的使用。
原始应用程序使用以下连接字符串可以轻松连接到MS Access 2007格式的DB文件:
OleDbConnection^ conn = gcnew OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=|DataDirectory|DB.accdb");
现在,当我尝试使用pyodbc和以下连接字符串连接到相同的DB文件(这次放在C:\中)时:
conn = pyodbc.connect("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\DB.accdb;")
不管我是保留OLEDB提供程序还是像这里所述使用Provider=MSDASQL;MS指出它不适用于64位),我仍然会收到以下错误消息:

pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnectW)')

这可能是什么原因导致的呢?

补充: 我更仔细地查看了pyodbc文档,并尝试了conn = pyodbc.connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=c:\\DB.accdb;") - 但是还是出现了同样的错误。这真的很奇怪,因为pyodbc.dataSources()显示我有这个提供程序。

补充2: 我尝试使用win32com.client,例如这里,以便使用OLE DB连接-但没有成功。似乎不可能,什么都不起作用。

1个回答

13
  1. 尝试使用以下类似的内容,而不是使用与OLEDB相同的字符串:
    "Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\DB.accdb;"

  2. 你可能无法直接从x64 Python应用程序连接到驱动程序:Access 2007及其ACE驱动程序仅支持32位。
    相反,获取适用于Access 2010的ACE x64驱动程序,但要注意,如果你已经安装了Access或32位ACE驱动程序,则它将无法正常工作。
    如果您希望应用程序在其他系统上运行,建议使用32位版本的Python和ACE驱动程序:不建议混合使用办公工具和驱动程序的x64和x86版本,否则可能会遇到许多问题。

  3. 如果问题不是出现在32/64位混合环境中,那么也许这个问题有你所寻找的答案


谢谢,我会注意x64兼容性问题。然而,对于这个应用程序,我已经决定手动将DB移植到SQLite并以此方式使用它 - 我想这可能会解决很多问题 :) 无论如何,DB文件只能由应用程序本身进行编辑。 - havelock
我正在编辑答案以添加更多建议。也许问题只是连接字符串的问题?这样可以避免重写。 - Renaud Bompuis
我使用了你在开头提到的连接字符串,可以看到“ADD”部分;创建用户DSN可能会解决问题(虽然我不确定这是否有帮助,毕竟所有的驱动程序/提供者都失败了,而且我相当确定你在第二点中提到的是正确的,因为原始的VC++应用程序是32位),但正如我所提到的,我用更激烈的方式解决了这个问题。 - havelock
请注意,您可以使用“被动”开关在具有32位Office的计算机上强制安装64位驱动程序。但是其他事情可能会出问题!https://dev59.com/sGw05IYBdhLWcg3wpDVu - RobinL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接