最新消息

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

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

[公告2018/04/22] 台北 Python + Excel VBA 金融資訊爬蟲課程,課程如網頁內容 金融資訊爬蟲班:台北班 Python 金融資訊爬蟲、EXCEL VBA 金融資訊爬蟲

[公告2019/01/08] 請注意:我再次重申,部落格文章的程式碼,是要提供各位參考與學習,一旦網頁改版請自行修改,別要求東要求西要我主動修改,你們用我寫東西賺錢了、交差了,請問有分我一杯羹嗎?既然賺錢沒分我,請問有什麼理由要求我修改,如果沒能力改,就花錢來找我上課。

[公告2019/12/01] 若各位有 Excel VBA 案子開發需求,歡迎與我聯繫,可接案處理。

[公告2020/05/22] 頁面載入速度慢,起因為部分JS來源(alexgorbatchev.com)失效導致頁面載入變慢,目前已做調整,請多見諒。

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 資料庫檔案(淚)。

參考資料: