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 和以下连接到 Python 中的同一个 DB 文件(这次放在 C:\ 中)时conenction string:
conn = pyodbc.connect("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\DB.accdb;")
,无论我是保留 OLEDB 提供程序还是使用此处Provider=MSDASQL;提到的(MS 提到它不适用于 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() 表明我有这个提供程序。

ADD2:我尝试使用诸如此处的 win32com.client 使用 OLE DB 进行连接 - 没有成功。似乎这是不可能的,没有任何作用。

4

1 回答 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 或 ACE 驱动程序 32 位,它将无法工作。
    如果您希望您的应用程序可以在其他系统上运行,我会坚持使用 32 位版本的 Python 和 ACE 驱动程序:不建议混合使用 x64 和 x86 版本的 Office 工具和驱动程序,您最终可能会得到很多如果你这样做的话。

  3. 如果问题不在于 32/64 位混合,那么也许这个问题有您寻求的答案

于 2011-06-19T09:05:55.170 回答