以Excel VBA建置之「四級管制藥品電子化登錄簿冊」32位元/64位元問題解密

這是一篇很硬的文章!慎入!慎入!
當時我就硬了4.png
有位朋友說,寫個程式可以穩定執行後你以為就可以不用去管它了嗎?

錯!就跟生個孩子一樣,生出來後就要一直呵護它、照顧它,直到它老死下架或你比它先死,因為就算程式沒更動,可外在執行環境是一直在變的啊~

我辦公用電腦一直用32位元的系統,最近才把電腦的系統換成了64位元的WIN10,OFFICE也順便換成了64位的2016,問題就來了,原來用的好好的東西,我引以為傲跑了三年都沒事的Excel VBA建置之「四級管制藥品電子化登錄簿冊」,卻跑出個[Microsoft][ODBC driver…]方面的錯誤訊息!

上網查發現是ADO(ActiveX Data Objects)的問題,貌似說是ADO是32位元下的元件,在64位元下無法運行(不知道到底是不是這個原因,就當它是吧)。於是開始不死心嘗試引用不同的ADO版本,從2.8試到了6.1,結果...都不行……

俺當時的心情真的 @$#E%&)......真想問候微軟他媽,既然不能用,你為啥在64位的OFFICE引用裡還能看到ADO呢?這不是坑爹嗎!

一開始,龜一點的解決方法基本都是放棄64位的OFFICE………就像7月份發生的那次一樣,64位元WIN10 回去使用 32位元OFFICE 2007,彼此相安無事了3個月,以為一切都會那樣美好。誰知10月2X日微軟發佈了重要安全性更新,讓你不得不更新,自此不論是我家裡(64位元WIN10 + 32位元OFFICE 2013),或辦公室為了跑程式唯一那台(64位元WIN10 + 32位元OFFICE 2007),都一樣,Microsoft OLE DB Provider for ODBC Drivers 不run就是不run!!

秉著存在就有道理的精神,繼續在網上挖……ConnectionStrings.com 讓我看到了希望,它說”The Microsoft OLE DB Provider for Jet” and “the Jet ODBC driver” 只能在 32-bit 的環境,而在64-bit就是不行, 解決方法基本是使用Microsoft ACE OLEDB 12.0(Microsoft Access Database Engine)
64位元要用:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=實體檔案路徑;HDR=YES;

對比我原本使用的32位元方法:
方法一Microsoft Jet OLE DB 4.0:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=實體檔案路徑;HDR=YES;
方法二Microsoft Excel ODBC Driver:
Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=實體檔案路徑;

試試看,居然就成了,那個開心啊,菜鳥我,終於為換新環境做好了充分的準備。
因為自己被64位元這個問題困擾了三個月,所以決定寫出來,供需要的人參考。
不要問我,直接去找答案 ConnectionStrings.com

留言