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驱动已经被编译过了!