QT 5.11 Oracle 11.2 远程连接

QT因为授权问题,默认是不支持Oracle数据库连接驱动的,需要自己解决,目前有两个方案:

1. 网上搜索别人编译好的驱动(本质上就是两个dll),这个需要你的QT版本,操作系统位数,oracle版本都要能够对应。<比较困难>

2. 自己编译,调试。<坑比较多>

 

如下步骤实测可行:

1. 必须安装oracle的Instant Client。

搜索,注册oracle账户,然后才可以下载。一般下载对应winows 64或者32位版本的最新版本即可。

注意:需要下在Base和SDK 两个包。 两个zip文件,解压后放到某个目录下即可。

Base包里边是一些动态库等可执行程序。

SDK包里边有inc,lib 目录分别对应编译要用的头文件和lib库。

据说,如果有Oracle client光盘可以直接安装搞定,我没有这个条件。

QT 5.11 Oracle 11.2 远程连接_第1张图片

 

2. QT环境准备。

如果默认在安装QT的时候没有选择源代码,无法编译。

在QT官网下载在线安装包,然后输入账户,选择相应版本,勾选对应编译器(个人选项msvc2015),以及源代码选项。我个人安装了最新的QT5.11.2 (2018年9月28)。

在线安装的QT系统个头比较大,但是内置的MaintenanceTool.exe 还是比较方便后期维护的。

QT 5.11 Oracle 11.2 远程连接_第2张图片

 

2. 修改工程配置,并编译

找到oci代码工程所在的目录,例如:D:\Qt2\5.11.2\Src\qtbase\src\plugins\sqldrivers\oci

用qt creator打开,然后修改pro工程文件:

用msvc编译的话,去掉原有的 QMAKE_USE += oci

增加 oracle头文件路径,库路径,以及 QMAKE_LFLAGS 为对应的oci.lib文件。

例如:我的oracle client 文件在D:\orcale\instantclient_18_3\sdk。

 

注意: QT中路径要用 / 而不是 windows的 \ 。

QT 5.11 Oracle 11.2 远程连接_第3张图片

 

接下来编译成功。 注意这个工程的输出在你QT系统所在磁盘的 更目录下。 例如: 我的直接在D:\根目录下生成了一个 plugins/sqldrivers 目录。

QT 5.11 Oracle 11.2 远程连接_第4张图片

 

 

3. 驱动库的使用

把编译出来的文件中,qsqloci.dll, qsqlocid.dll 两个文件复制到QT安装系统的对应目录下即可,例如:D:\Qt2\5.11.2\msvc2015_64\plugins\sqldrivers

注意:QT的QOCI 数据库驱动,还依赖 oracle 的 oci.dll 文件。 在第一步中Instant Client的目录下可以找到。需要把 oci.dll 所在的目录加到系统的path路径。不能简单复制一份到你应用程序exe的工作目录下,否则会出现另外一个异常:QOCIDriver: unable to create 

例如: 我在debug工程下的目录是 D:\Qt2\_projects\PM\build-PackageMeasureGUI-Desktop_Qt_5_11_2_MSVC2015_64bit-Debug

3. 软件的部署与发布

软件发布,部署的时候,需要复制oci.dll 到与exe同级目录下。驱动一起放在 exe 同级下的/sqldrivers目录下。

注意程序源代码要增加: QApplication::addLibraryPath("./plugins"); 让qt启用插件目录,例如上边的sqldrivers目录下各种驱动。

 

4. 测试/调试

源码中可以采用类似如下代码来判定oci驱动是否真正加载成功。

db = QSqlDatabase::addDatabase(“QOCI”);

qDebug() << "QT DB driver?" << db.isValid();

 

编译好的dll,可以直接下载:

https://download.csdn.net/download/gaochaoran/10694471

 

 

 

 

你可能感兴趣的:(QT 5.11 Oracle 11.2 远程连接)