我想你和我一樣,照著終于編譯好了qt的oracle驅動QOCI,連接成功!!! 一文編譯了QOCI,我目前遇到下面錯誤:(代碼我直接用原文的) QSqlDatabase: QOCI driver not loadedQSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7e
我想你和我一樣,照著終于編譯好了qt的oracle驅動QOCI,連接成功!!!
一文編譯了QOCI,我目前遇到下面錯誤:(代碼我直接用原文的)
QSqlDatabase: QOCI driver not loaded QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7 error_Oracle: "Driver not loaded Driver not loaded"
解決這個問題就得從原理上說:
thin是純java實現tcp/ip的c/s通訊;而oci方式,客戶端通過native java method調用c library訪問服務端,而這個c library就是oci(oracle called interface),因此這個oci總是需要隨著oracle客戶端安裝(從oracle10.1.0開始,單獨提供OCI Instant Client,不用再完整的安裝client)
很多時候我們都考慮我們編譯的$QTDIR/plugins/sqldrivers 下DLL 是否正確加載,而忽略Oracle那邊的庫是否加載。
那么問題解決方法就是
方法1、在系統Path 就是環境變量中添加 你的Oracle oci.dll庫位置 C:\oracle\product\10.2.0\client_1\BIN。如果你正確安裝Oracle客戶端,就不應該存在這個問題。
方法2、有點土就是用QT自帶 loadlibrary 自己加載oci.dll庫位置。
我用的方法是1+2,已經測試無問題。
QLibrary *hello_lib = NULL; //寫清楚庫的路徑,如果放在當前工程的目錄下,路徑為./Oracle.so hello_lib = new QLibrary("C:\\oracle\\product\\10.2.0\\client_1\\BIN\\oci.dll"); //加載動態庫 hello_lib->load(); if (!hello_lib->isLoaded()) { printf("load Oracle failed!\n"); return ; }
但要注意不管方法1或者方法2,Oracle 客戶端是必須要裝的,另外我不知道QT各版本編譯出來的庫是否通用,自己編譯比較好。
WIN7 我還遇到一個問題:
QOCIDriver: unable to create environment error_Oracle: " Unable to logon"
這個你用PL/SQL應該遇到過
解決方法:
1、右鍵用 管理員身份賬戶 運行
2、程序路徑不能有(),類似"C:\Program Files (x86)" 這樣的路徑無法登陸。我只知道10 是不行,不知道12改了沒有。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com