我在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;
提到here(MS 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連接 - 沒有成功。似乎這是不可能的,沒有任何工作。
謝謝,我會意識到x64兼容性問題。但是,對於這個應用程序,我決定手動將DB移植到SQLite並以此方式使用它 - 我認爲它可能會解決很多問題:)無論如何,DB文件只能由應用程序本身編輯。 – havelock
我在編輯答案以添加更多建議。也許問題只是連接字符串?會爲您節省重寫。 –
我已經使用了您在開頭提到的連接字符串,請參閱「ADD」部分;創建一個用戶DSN可能會解決這個問題(儘管我不確定這會有所幫助,畢竟所有的驅動程序/提供者都失敗了,而且我很確定你在第二點提到的是這種情況,因爲原來的VC++應用程序是32位),但正如我所提到的,我以更激烈的方式解決了這個問題。 – havelock