如何在QT中编译数据库驱动

24 篇文章 0 订阅

Qt开发环境的搭建请参考网址:http://blog.csdn.net/fan_hai_ping/article/details/8273669

MySQL库编译

在使用MySQL数据库的时候,报如下错误:

QSqlDatabase: QMYSQL driver not loaded

QSqlDatabase: available drivers: QSQLITEQODBC3 QODBC QPSQL7 QPSQL

缺省情况下,对于QSqlDatabase可用的库有QSQLITEQODBC3 QODBC QPSQL7 QPSQL,如果需要使用MySQL库或者Oracle库就要自己进行手动编译,方法如下:

首先下载Mysql的开发库,下载网址如下:

http://cdn.mysql.com/Downloads/Connector-C/mysql-connector-c-noinstall-6.0.2-win32.zip

然后解压缩文件到Qt安装目录下,修改目录名为mysql,现在开始编译MySQL驱动:

进入到D:\Qt\4.8.4\src\plugins\sqldrivers\mysql目录(QT SDK安装目录)下,找到mysql.pro文件,在第二行添加:

INCLUDEPATH +=D:/Qt/mysql/include

LIBS +=D:/Qt/mysql/lib/libmysql.lib

在该目录下执行qmake生成makefile文件:

qmake -oMakefile mysql.pro  (或) qmake

执行make进行编译(VS使用nmake命令)Debug和Release版本:

make (or) nmake

nmake /fMakefile.Debug

nmake /f Makefile.Release

此时,会在当前目录下debug和release目录中生成dll和lib文件,把这些动态库文件(qsqlmysqld4.dll/lib和qsqlmysql4.dll/lib)拷贝到D:\Qt\4.8.4\plugins\sqldrivers目录下。

同时,也要把mysql/lib/libmysql.dll这个文件复制到qt的bin目录(D:\Qt\4.8.4\bin)下。

Oracle库编译

 

搭建开发环境需下载两个文件:

下载网址:http://www.oracle.com/technetwork/topics/winsoft-085727.html

instantclient-basic-nt-11.2.0.3.0.zip。这个包包含运行OCCI程序的动态链接库。

instantclient-sdk-nt-11.2.0.3.0.zip。这个包包含开发库的头文件、静态链接库以及occi示例程序。

注:在Oracle官网上下载文件时需要注册一个账号(free)。

解压缩instantclient-sdk-nt-11.2.0.3.0.zip,修改instantclient-sdk-nt-11.2.0.3.0为oracle,然后把oracle目录拷贝到QT安装目录D:\Qt下。

进入到D:\Qt\4.8.4\src\plugins\sqldrivers\oci目录下,修改oci.pro,添加下面两行:

INCLUDEPATH +=D:/Qt/oracle/instantclient_11_2/sdk/include

LIBS +=D:/Qt/oracle/instantclient_11_2/sdk/lib/msvc/oci.lib

执行qmake生成makefile项目,打开Makefile.Debug和Makefile.Release文件修改第18行,删除掉红色字体标注的oci.lib字符串:

LIBS          = D:/Qt/oracle/instantclient_11_2/sdk/lib/msvc/oci.lib oci.lib

使用nmake进行编译生成Debug和Release动态库:

nmakerelease  (or) nmake debug

此时,会在当前目录下debug和release文件夹中生成的动态库(qsqloci4.dll/.lib和qsqlocid4.dll/.lib),把它们拷贝到D:\Qt\4.8.4\plugins\sqldrivers目录下。

同时,把instantclient-basic-nt-11.2.0.3.0.zip压缩文件中的oci.dll提取到D:\Qt\4.8.4\bin目录中,这样QSqlDatabase可以正确的加载plugins\sqldrivers目录中的Oracle动态库。

http://www.verydemo.com/demo_c152_i5735.html

例子:

void MainDialog::connectOracle(QString sIp, int iPort,  QString sDbNm, QString SUSErNm, QString sPwd) 

    db = QSqlDatabase::addDatabase("QOCI"); 
    db.setHostName(sIp); 
    db.setPort(iPort); 
    db.setDatabaseName(sDbNm); 
    db.setUserName(sUserNm); 
    db.setPassword(sPwd); 
    if (db.open()) 
    { 
        QMessageBox::information(this, tr("提示"), tr("Oracle数据库连接成功!"), tr("确定")); 
    } 
    else 
    { 
        QMessageBox::information(this, tr("提示"), tr("Oracle数据库连接失败!"), tr("确定")); 
        qDebug() <<"error_Oracle:\n" << db.lastError().text(); 
    } 

二:连接过程遇到的问题。


问题1:


QSqlDatabase: QOCI driver not loaded


QSqlDatabase:available drivers: QSQLITE QODBC3 QODBC 
(1)出错原因:本连接是通过QMYSQL驱动,而Qt本身并没有QOCI驱动(只有QSQLITE QODBC3 QODBC),


      所以就需要自己编译QOCI。


(2)编译QOCI驱动。


  1.go to "Qt Command Prompt" window. (开始-程序-对应的qt项里面去找)。


  2.qmake "INCLUDEPATH+=c:\oracle\oci\include" "LIBS+=-Lc:\oracle\oci\lib\msvc" oci.pro


  3.qmake "INCLUDEPATH+=D:\oracle_setup\app\admin\product\11.1.0\db_3\OCI\include" "LIBS+=-LD:\oracle_setup\app\admin\product\11.1.0\db_3\OCI\lib\msvc" oci.pro


  4.mingw32-make


问题2:


出现错误:


D:\qt_sdk\qt\src\plugins\sqldrivers\oci>mingw32-make
mingw32-make -f Makefile.Debug all
mingw32-make[1]: Entering directory `D:/qt_sdk/qt/src/plugins/sqldrivers/oci'
mingw32-make[1]: Nothing to be done for `all'.
mingw32-make[1]: Leaving directory `D:/qt_sdk/qt/src/plugins/sqldrivers/oci'
mingw32-make -f Makefile.Release all
mingw32-make[1]: Entering directory `D:/qt_sdk/qt/src/plugins/sqldrivers/oci'
mingw32-make[1]: Nothing to be done for `all'.
mingw32-make[1]: Leaving directory `D:/qt_sdk/qt/src/plugins/sqldrivers/oci'


出错原因:这个问题表示QOCI驱动已经被编译过了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值