【问题标题】:Connecting to MS Access 2007 (.accdb) database using pyodbc使用 pyodbc 连接到 MS Access 2007 (.accdb) 数据库
【发布时间】:2011-09-17 19:03:16
【问题描述】:

我在 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 和以下连接字符串在 Python 中连接到同一个数据库文件(这次放在 C:\ 中)时:
conn = pyodbc.connect("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\DB.accdb;")
,无论我是保留 OLEDB 提供程序还是使用 Provider=MSDASQL; 提到的 here (MS mentions it's not availiable for 64bit),我都会收到以下错误:

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: 我尝试使用诸如here 之类的 win32com.client 来使用 OLE DB 进行连接 - 没有成功。似乎不可能,没有任何作用。

【问题讨论】:

    标签: python ms-access 64-bit pyodbc


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

    2. 您可能无法直接从 x64 Python 应用程序与驱动程序对话:Access 2007 及其 ACE 驱动程序只有 32 位。
      相反,获取ACE x64 driver for Access 2010,但请注意,如果您已经安装了 Access 或 ACE 驱动程序 32 位,它将无法工作。
      如果您希望您的应用程序可以在其他系统上运行,我会坚持使用 32 位版本的 Python 和 ACE 驱动程序:不建议混合使用 x64 和 x86 版本的 Office 工具和驱动程序,您最终可能会得到很多如果你这样做了问题。

    3. 如果问题不在于 32/64 位混合,那么可能是 this question has the answer you seek

    【讨论】:

    • 谢谢,我会注意 x64 兼容性问题。但是,对于这个应用程序,我决定手动将 DB 移植到 SQLite 并以这种方式使用它——我认为它可能会解决很多问题 :) 无论如何,DB 文件只能由应用程序本身编辑。
    • 我正在编辑答案以添加更多建议。也许问题只是连接字符串?将为您节省重写。
    • 我已经使用了你在开头提到的连接字符串,参见“添加”部分;创建用户 DSN 可能会解决问题(尽管我不确定这会有所帮助,毕竟所有驱动程序/提供程序都失败了,但我仍然很确定您在第二点中提到的情况就是这样,因为最初的 VC++ 应用程序是 32 位的),但正如我所提到的,我已经以更激烈的方式解决了这个问题。
    • 请注意,您可以使用“被动”开关在具有 32 位办公室的机器上强制安装 64 位驱动程序。不过其他事情可能会中断!stackoverflow.com/questions/7116019/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 2011-01-23
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    相关资源
    最近更新 更多