1. 程式人生 > >【VBA研究】Excel在64位系統安裝目錄造成的ORA-06413:連線未開啟錯誤

【VBA研究】Excel在64位系統安裝目錄造成的ORA-06413:連線未開啟錯誤

我做的excel工具,連線oracle資料庫查詢資料,平時可以很好的執行,無論是XP和win7都可以。後來碰到一臺win7(64位)的系統,發現無法連線資料庫,報“ORA-06413: 連線未開啟”錯誤。

錯誤描述: 用ORACLE的工具裡的sqlplus可以連線,可是執行excel中的巨集就是死活報“ORA-06413:連線未開啟”錯誤 。如下圖:

查詢原因和解決辦法(不想看過程就直接看結論):

點選除錯,出錯語句是:

cnn.Open "Provider=msdaora;Data Source=dl580;User Id=emssxjk;Password=emssxjk;"

顯然不是語句問題,在網上查了一下,判斷可能是程式所在的目錄有括號導致的,檢查發現office軟體的安裝目錄確實是在program file (x86)下,解除安裝重灌,發現仍然安裝在那個目錄下,儘管當時選擇路徑時並沒有(x86)。直接將路徑中的(x86)去掉,結果執行時系統又自動重新安裝一個帶(x86)的。

我想是不是32位的軟體安裝後都要加一個(x86),試驗發現並不是如此,只要安裝目錄不是program file,輸入什麼目錄就是什麼目錄。再次解除安裝office,重新安裝時不用program file目錄,改成office目錄,問題解決。

結論:安裝office應用時不要使用預設的program file目錄(資料夾),而是輸入一個,隨便叫什麼名字都可以,比如office,其它安裝過程一樣。這樣,應用就會安裝在指定的目錄中,比如C:\office。

同樣,安裝64位的office應用也可以解決問題。

==============================

program files與program files(x86)的區別

簡單來說:Program Files (x86)存放了一些32位的系統檔案。它和正常的Program Files以及Windows資料夾一樣,都屬於系統資料夾,請勿隨意改動。 64位Windows中提供了一種技術,Windows on Windows 64(即WoW64)。它可以使32位的應用程式正常地執行在64位的Windows中,這樣使用者在從32位到64位過渡的過程中,不會感受到很大的不便。為了能讓32位的程式正常執行,64位的Windows中自帶了一大部分的32位的系統檔案,當32位程式執行的時候,系統會給它虛擬出一個32位的環境,這樣32位程式會以為自己執行在32位Windows中。Windows的系統檔案主要是存放在%SystemDrive%\Program Files和%Windir%\System32中(即通常的C:\Program Files和C:\Windows\System32)。64位系統中,這兩個資料夾存放的是64位的系統檔案,為了存放32位的同名系統檔案,64位系統中有另外兩個資料夾與之對應,%SystemDrive%\Program Files (86)和%Windir%\SysWoW64(即通常的C:\Program Files (86)和C:\Windows\SysWoW64)。 
當32位程式需要訪問Program Files或者System32中的檔案時,系統會自動轉向到Program Files (x86)或者SysWoW64中,這樣32位的程式就可以正常的在64位Windows中運行了。類似的情況也發生在應用程式安裝的時候,64位的程式一般都會被安裝到Program Files中,而32位的程式則是裝在Program Files (x86)中。