2011-06-18 192 views
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");
現在,當我嘗試連接到同一個數據庫文件(放在C:\這個時候)在Python使用pyodbc及以下conenction字符串:
conn = pyodbc.connect("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\DB.accdb;")
,也不管我是否保留OLEDB提供商或我使用了Provider=MSDASQL;提到hereMS mentions it's not availiable for 64bit),我不斷收到以下錯誤:使用pyodbc連接到MS Access 2007(.accdb)數據庫

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

什麼可能導致此問題?

ADD: 我已經更仔細地研究了pyodbc文檔,並嘗試了conn = pyodbc.connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=c:\\DB.accdb;") - 同樣的錯誤。這真的很奇怪,因爲pyodbc.dataSources()表明我有這個提供者。

ADD2: 我嘗試win32com.client的用法,如here爲了通過使用OLE DB連接 - 沒有成功。似乎這是不可能的,沒有任何工作。

回答

13
  1. 嘗試使用類似下面的,而不是使用相同字符串作爲一個OLEDB:
    "Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\DB.accdb;"

  2. 你可能不能夠從你的64 Python應用程序跟司機直接:Access 2007及其ACE驅動程序僅爲32位。
    取而代之的是得到ACE x64 driver for Access 2010,但要小心,如果您已經安裝了Access或安裝了ACE驅動程序32位,它將不起作用。
    如果您希望您的應用在其他系統上運行,那麼我會堅持使用Python和ACE驅動程序的32位版本:不推薦將Office工具和驅動程序的x64和x86版本混合使用,最終可能會導致如果你這樣做有很多問題。

  3. 如果問題不在於32/64位混合,那麼可能是this question has the answer you seek

+0

謝謝,我會意識到x64兼容性問題。但是,對於這個應用程序,我決定手動將DB移植到SQLite並以此方式使用它 - 我認爲它可能會解決很多問題:)無論如何,DB文件只能由應用程序本身編輯。 – havelock

+0

我在編輯答案以添加更多建議。也許問題只是連接字符串?會爲您節省重寫。 –

+0

我已經使用了您在開頭提到的連接字符串,請參閱「ADD」部分;創建一個用戶DSN可能會解決這個問題(儘管我不確定這會有所幫助,畢竟所有的驅動程序/提供者都失敗了,而且我很確定你在第二點提到的是這種情況,因爲原來的VC++應用程序是32位),但正如我所提到的,我以更激烈的方式解決了這個問題。 – havelock

相關問題