Qt5.3.2_Oracle驱动

Posted CppSkill

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt5.3.2_Oracle驱动相关的知识,希望对你有一定的参考价值。

参考网址:http://blog.csdn.net/sdqyhn/article/details/39855847

 

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”中的响应驱动,复制到 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、

 

以上是关于Qt5.3.2_Oracle驱动的主要内容,如果未能解决你的问题,请参考以下文章

qt5.3.2移植到arm上出undefined reference to '__sync_sub_and_fetch_4的错

Qt5.3.2_CentOS6.4_单步调试环境

Qt5构建出错问题解决办法

由于系统错误代码 998,无法加载 Instantclient_12_1 ODBC 驱动程序中 Oracle 的设置例程

Qt编译好的OCI驱动下载

Qt mac QMYSQL(动态加载插件QPluginLoader的用法)