T 6.1.2 生成 oracle QOCI 连接 库

QT 6.1.2 生成 oracle QOCI 连接 库

前提条件
1,本地安装了Oracle数据库或者oracle instant client。
2,安装了Qt6.1.2,并且下载了scr 文件

一,打开,创建内置工程
在qt 安装的目录下,找到src 文件夹下 oci 目录
D:\Qt6\6.1.2\Src\qtbase\src\plugins\sqldrivers\oci
一般来说有个 oci.pro 工程文件。(我这边没有,可能是有5.10 版本的原因,最后copy了一份)
最终主要内容如下:

 QT += sql

TARGET = qsqloci

HEADERS += $$PWD/qsql_oci_p.h
SOURCES += $$PWD/qsql_oci.cpp $$PWD/main.cpp


#QMAKE_USE += oci
#根据Oracle客户端安装路径 指定oci.dll(minGW) 或 oci.lib(MSVC)
QMAKE_LFLAGS +=E:\app\yj\product\11.2.0\dbhome_1\OCI\lib\MSVC\oci.lib

#根据Oracle客户端安装路径 指定头文件和lib库路径
INCLUDEPATH += E:\app\yj\product\11.2.0\dbhome_1\OCI\include
LIBPATH += E:\app\yj\product\11.2.0\dbhome_1\OCI\lib\MSVC

#E:\app\yj\product\11.2.0\dbhome_1\bin

darwin:QMAKE_LFLAGS += -Wl,-flat_namespace,-U,_environ

OTHER_FILES += oci.json

PLUGIN_CLASS_NAME = QOCIDriverPlugin
include(../qsqldriverbase.pri)

QMAKE_USE += oci 需要注释掉

QMAKE_LFLAGS
INCLUDEPATH
LIBPATH
需要对应oracle instant client 到安装目录

二 问题处理
1,pro 工程文件
QT += sql 修复 #include <qsqldriverplugin.h> 文件无法找到的报错
2 文件位置
由于6.1.2 private 位置修改导致的工程中设计的如:
<QtSql/private/qsqlcachedresult_p.h> 之类的文件没法找到,
查看安装include 发现 是文件目录结构发生修改,而oci工程中的文件没有对应,甚至SCR中其他的文件路劲也没有对应。没办法只能一个改,改完在编译,再报错再改。
主要集中在两类 头文件引用
<QtSql/private/.h> 修改为 <QtSql/6.1.2/QtSql/private/.h>
<QtCore/private/.h> 修改为 <QtCore/6.1.2/QtCore/private/.h>
修改完成后,终于编译成功。竟然发下编译输出中没有输出dll文件路径,而且在设置的目录下也没有找到。输出如下:
在这里插入图片描述三 目标文件位置
郁闷了半天,最后不停的反复重编译,然后查看输出,最后再报错(重编译的时候,需要删除之前的,在目标路劲下找不到,哈哈)中找到,报错如下。
在这里插入图片描述但是设置的 的 路径确实在工程目录下
D:\Qt6\6.1.2\Src\qtbase\src\plugins\sqldrivers\oci
这块可能是使用QtCreate 少的缘故吧,还是喜欢VS+QT。
最后将 生成的 qsqloci.dll qsqlocid.dll copy 到 目标编译器msvc2019_64的 D:\Qt6\6.1.2\msvc2019_64\plugins\sqldrivers 目录下。

运行连接程序如下:

    QSqlDatabase m_DB = QSqlDatabase::addDatabase("QOCI", sConnectName);
    m_DB.setHostName(sDBAddress);
    m_DB.setDatabaseName(sDBName);
    m_DB.setUserName(sUser);
    m_DB.setPassword(sPwd);
    bool bOpenOracleDB = m_DB.open();
    if (bOpenOracleDB)
    {
				QSqlQuery query(m_DB);
        return true;
    }
    else
    {
        qDebug() << "connect failed:"<< m_DB.lastError().text();
    }

不再报驱动未加载错误了。

四 dll文件

链接:https://pan.baidu.com/s/1C0uJdjwcWq1OFsoR9_lLEg
提取码:1234

五 项目工程
https://codechina.csdn.net/shareprojects/QtGenQOCi
(只做代码参考,里面引用到SCR中的文件,估计不能单独运行)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值