iInfo 資訊交流: Python 操作資料庫 (5) --- Access:ACE ODBC driver 64位元的安裝

最新消息

[公告2014/05/30] 如有需要將部落格中,任何一篇文章的程式碼使用在商業用途,請與我聯繫。

[公告2015/04/26] Line版的 iInfo程式與投資應用 群組已上線想加入的朋友們,請先查看 "入群須知" 再與我聯繫 Line : aminwhite5168,加入請告知身分與回答 "入群須知" 的問題。

[公告2017/02/20] 近來有網友詢問 MultiCharts 與 Excel 畫冰火能量圖 (8)MultiCharts 與Excel 畫冰火能量圖(11) --- 更名「台股儀表板」 文章中教學檔案取得方式,有興趣的朋友可透過 Line了解詳情 (請勿以為是免費分享),Line : aminwhite5168。

[公告2018/04/22] 台北 Python + Excel VBA 金融資訊爬蟲課程,課程如網頁內容 金融資訊爬蟲班:台北班 Python 金融資訊爬蟲、EXCEL VBA 金融資訊爬蟲,請盡快把握機會,歡迎券商、大專院校邀約講座。

[公告2018/06/01] 台指能量儀表板教學課程,課程如網頁內容 台北班:台指能量儀表板

[公告2018/10/02] 期交所於2018/10/03進行網址改版,若有參考部落格與期交所相關文章,請各位讀者自行修改。

2018年1月6日 星期六

Python 操作資料庫 (5) --- Access:ACE ODBC driver 64位元的安裝

在 x64 環境下使用 64位元 Python 去操作 32 位元的 Access 資料庫檔案,遇到了 Python 無法連結 Access 資料庫檔案的問題。
錯誤訊息:
Error: ('IM002', '[IM002] [Microsoft][ODBC \xc5X\xb0\xca\xb5{\xa6\xa1\xba\xde\xb2z\xad\xfb] \xa7\xe4\xa4\xa3\xa8\xec\xb8\xea\xae\xc6\xa8\xd3\xb7\xbd\xa6W\xba\xd9\xa5B\xa5\xbc\xab\xfc\xa9w\xb9w\xb3]\xaa\xba\xc5X\xb0\xca\xb5{\xa6\xa1 (0) (SQLDriverConnect)')

看到這錯誤還真的不好找出問題所,就思考往幾個方向去做了實驗,看看能否找出問題發生原因。
  1. 錯誤訊息貼到 Google 去找,結果都是說連結字串錯誤所造成,因此往連結字串方向去尋找,結果無功而返。
  2. 試想有沒可能因為 32位元 ACCESS 資料庫檔案從 32位元系統移置 64位元系統,造成衝突而影響,後來試了很多次重新在64位元系統下建立 32位元 ACCESS 檔案,問題依舊無解。
  3. 試想會不會可能是 pyodbc 沒有支援 64 位元,找了相關資料一樣無解,也是沒有打中問題核心。
  4. 無意間看到問題是發生在 Anaconda 64位元 + 64位元系統上,結果重新試了 Anaconda 32位元 + 64位元系統,結果 32位元 Python 程式可以連結 32位元 ACCESS 資料庫檔案 (無言,這也是應該要正常)。
  5. 最後重新 Google 關鍵字「Microsoft Access Driver (*.mdb, *.accdb)」,找到一篇關於系統 「ODBC資料來源管理員有」關的文章 「Connecting to Microsoft Access」,想說試試看有沒有解,結果發現「ODBC資料來源管理員 (32 位元) 」的驅動程式很多,包含「Microsoft Access Driver (*.mdb, *.accdb)」存在,而「ODBC資料來源管理員 (64 位元) 」卻沒有「Microsoft Access Driver (*.mdb, *.accdb)」。
「ODBC資料來源管理員 (32 位元)」。

「ODBC資料來源管理員 (64 位元)」。

這時心裡就有個底了,應該這是這個原因造成 64位元 Python 程式無法連結 32位元 ACCESS 資料庫檔案,於是到微軟官網去下載「Microsoft Access Database Engine 2010 可轉散發套件」安裝。

安裝遇到錯誤訊息,原因為系統中有安裝 ACCESS 2010 32位元版本。

移除在 ACCESS 2010 後,重新安裝「Microsoft Access Database Engine 2010 可轉散發套件」,再查看「ODBC資料來源管理員 (64 位元)」,確認已經有「Microsoft Access Driver (*.mdb, *.accdb)」存在了。

最後執行 64位元 Python 程式碼,確認可正常連結 32位元 ACCESS 資料庫檔案(淚)。

參考資料: