Qt5.3.2_Oracle驱动
参考网址:http://blog.csdn.net/sdqyhn/article/details/39855847
ZC: 将编译好的 qsqloci.dll和qsqlocid.dll 放到 目录“E:\ZC_ProgramFiles_2016\Qt532_vs2010\5.3\msvc2010_opengl\plugins\sqldrivers”中,这样 在Qt中调试程序的时候 也可以找到相应的驱动文件了
1、这只是 Qt5.3.2 使用的驱动,它还是要调用 Oracle客户端/服务端 里面的文件。
并不是 有了这个驱动就不需要安装Oracle客户端/服务端...
1.1、源码所在路径:“E:\ZC_ProgramFiles_2016\Qt532_vs2010\5.3\Src\qtbase\src\plugins\sqldrivers\oci”
ZC: 在Qt5.3.2的安装路径中搜索“oci”,还搜到一个结果:“E:\ZC_ProgramFiles_2016\Qt532_vs2010\5.3\Src\qtbase\src\sql\drivers\oci”,但是 网络上面的文章 都没有用这个路径源码的... 暂时先不管它吧...
2、将 源码 复制出来,准备编译
2.1、貌似 需要一些依赖项 ==> 直接在 路径“E:\ZC_ProgramFiles_2016\Qt532_vs2010\5.3\Src\qtbase\src\plugins\sqldrivers\oci”中打开项目再编译
2.1.1、提示 找不到“oci.h”
网上搜索,解决:在 pro文件中添加 :
INCLUDEPATH += E:\oracle\product\10.2.0\db_1\oci\include
LIBPATH += E:\oracle\product\10.2.0\db_1\oci\lib\msvc
ZC: 我这里,安装的是 Oracle10g(x86)的服务端,不同版本的Oracle 这里的路径可能会不同
2.1.2、执行 qmake--> 重新构建,一切正常。生成的 dll文件 位于路径:“F:\plugins\sqldrivers”中,这个不知是哪里设置的...
3、使用:
要将“F:\plugins\sqldrivers”中的相应驱动(qsqloci.dll和qsqlocid.dll),复制到 exe所在路径的 "sqldrivers"文件夹下,不然 会报 找不到驱动的错误。
4、测试代码:
4.1、pro
QT += core gui \
sql
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = OracleTest01
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
#ZC: 本来 编译不通过,说找不到函数,肯定是缺少lib文件了,但是 设置了下面的语句还是不行。
#ZC: 后来才知道 原来是“QT +=”中药添加“sql”
#LIBPATH += F:/plugins/sqldrivers
#LIB += -lqsqloci
4.2、cpp
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QtSql/QSqlDatabase> #include <QtSql/QSqlQuery> #include <QtSql/QSqlRecord> #include <QtSql/QSqlError> #include <QDebug> #include <QMessageBox> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } #define DB_DRIVER "QOCI" // ZC: 这里写的是“QOCI”,实际对应的所需要的 文件是“qsqloci.dll” #define DB_HOSTNAME "192.168.1.201" #define DB_DATABASENAME "ZHEJIANG" #define DB_USERNAME "wenzhoupdpas" #define DB_PASSWD "dongruisoft.com" void MainWindow::on_pbtnTest01_clicked() { // ZC: 连接名 QString strConnName = "wenzhoupdpas_z"; QSqlDatabase sqlDataBase; if (QSqlDatabase::contains(strConnName)) sqlDataBase = QSqlDatabase::database(strConnName); else // 使用Oracle数据库驱动 sqlDataBase = QSqlDatabase::addDatabase(DB_DRIVER, strConnName); sqlDataBase.setHostName(DB_HOSTNAME); sqlDataBase.setDatabaseName(DB_DATABASENAME); sqlDataBase.setUserName(DB_USERNAME); sqlDataBase.setPassword(DB_PASSWD); bool bOpen = sqlDataBase.open(); if (sqlDataBase.isOpen()) bOpen = true; if (! bOpen) { QMessageBox::about(this, "Error", sqlDataBase.lastError().text()); qDebug() << sqlDataBase.lastError().text(); } else { QMessageBox::about(this, "OK", "Open Oracle10g success ! !"); qDebug() << "Open Oracle10g success ! !"; } }
5、
6、
7、
8、