以Excel VBA建置之「四級管制藥品電子化登錄簿冊」32位元/64位元問題解密
這是一篇很硬的文章!慎入!慎入! 有位朋友說,寫個程式可以穩定執行後你以為就可以不用去管它了嗎? 錯!就跟生個孩子一樣,生出來後就要一直呵護它、照顧它,直到它老死下架或你比它先死,因為就算程式沒更動,可外在執行環境是一直在變的啊~ 我辦公用電腦一直用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位元要用: Provi