关于QT编译ORACLE驱动的问题

刚开始用QT,需要与ORACLE链结,可是QT没有自带ORACLE的驱动,需要自己编译。网上查了很久也没弄出来,感觉大家写的都比较简单,几经周折终于编译成功,和大家分享一下,希望会对像我这样刚接触QT和ORACLE的同学带来帮助。

因为没有驱动所以报错一直是

QSqlDatabase: QOCI driver not loaded

首先可以参考这篇文章设置环境变量等http://wenku.baidu.com/link?url=ccunEGgWOHyJu9tI-vK_wuYjhEC34GG0aWoRLjTuSWSs5I568JyH-Ug80qt66Sc-9bws6TT2PwXzgiD9_Tdke38A0BG8v3JVFcth_GxZljO

记住打开oci.pro之后在.pro文件中添加(我的oracle装在F盘)

INCLUDEPATH += F:\oracle\product\10.2.0\db_1\OCI\include
LIBPATH += F:\oracle\product\10.2.0\db_1\OCI\lib\MSVC
 
  
然后运行,我的是出现下面的代码
 
  

Starting C:\Qt\Qt5.2.1\Tools\mingw48_32\bin\mingw32-make.exe...

C:/Qt/Qt5.2.1/Tools/mingw48_32/bin/mingw32-make -f Makefile.Debug all

mingw32-make[1]: Entering directory 'C:/Qt/Qt5.2.1/5.2.1/Src/qtbase/src/plugins/sqldrivers/build-oci-Desktop_Qt_5_2_1_MinGW_32bit-Debug'

mingw32-make[1]: Nothing to be done for 'all'.

mingw32-make[1]: Leaving directory 'C:/Qt/Qt5.2.1/5.2.1/Src/qtbase/src/plugins/sqldrivers/build-oci-Desktop_Qt_5_2_1_MinGW_32bit-Debug'

C:/Qt/Qt5.2.1/Tools/mingw48_32/bin/mingw32-make -f Makefile.Release all

mingw32-make[1]: Entering directory 'C:/Qt/Qt5.2.1/5.2.1/Src/qtbase/src/plugins/sqldrivers/build-oci-Desktop_Qt_5_2_1_MinGW_32bit-Debug'

mingw32-make[1]: Nothing to be done for 'all'.

mingw32-make[1]: Leaving directory 'C:/Qt/Qt5.2.1/5.2.1/Src/qtbase/src/plugins/sqldrivers/build-oci-Desktop_Qt_5_2_1_MinGW_32bit-Debug'

C:\Qt\Qt5.2.1\Tools\mingw48_32\bin\mingw32-make.exe exited with code 0

这时编译好的文件会出现在C盘根目录plugins文件夹下,分别为libqsqloci.a,libqsqlocid.a,qsqloci.dll,qsqlocid.dll四个文件,然后把他们复制到C:\Qt\Qt5.2.1\5.2.1\mingw48_32\plugins\sqldrivers(我用的QT是5.2.1,ORACLE是10G,网上大部分不是5.2.1版本,所以路径什么的大家自己找一下,不要弄错了)

我用下面的代码测试,表明链接成功

int main(int argc, char *argv[])
{   //连接数据库
    QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");
    db.setHostName("XZ-20131019YFCP");
    db.setDatabaseName("orcl");
    db.setUserName("system");
    db.setPassword("gaowei553151883");
    if (db.open()) {qDebug()<< "链接远程数据库成功";}
    else{qDebug()<< "链接远程数据库失败";
        };
 
  

祝大家成功~



你可能感兴趣的:(关于QT编译ORACLE驱动的问题)