1.下载Oracle的相关驱动文件
出于工作要求需要远程连接别人的Oracle数据库,所以本地没有下载Oracle,驱动相关是直接到官网下载的。
(1)在Instant Client for Windows下选择位数。如果QT的编译器是32位的,驱动文件也要下载32位,跟编译器保持一致。
(2)下载basic和sdk两个包,下载完后解压即可。
2.Qt编译Oracle驱动
如果之前已经编译过,Qt已经支持了QOCI的话这一步可以跳过,否则的话需要自行编译一下。
(1)下载QT的源码组件,如果之前就下载了可以跳过。
(2)在源码中找到oci.pro文件,打开,将原先的QMAKE_USE += oci注销,按照下图更改,其中D:\Oracle\DBDLL\instantclient_19_20是前面Oracle驱动文件的解压路径,自行替换为实际路径即可,替换完成后直接编译oci.pro。
注意:如果是用msvc的话,前面QMAKE_LFLAGS要替换为oci.lib
(3)重新编译oci.pro成功后在本机D:\plugins\sqldrivers目录下会生成对应的文件,图示是mingw编译,将生成的两个dll文件放入qt安装目录下的..\plugins\sqldrivers中,并且按需放到项目目录下。如果是msvc的话就是生成了dll和lib,也一样操作就好
(4)将第1步下载的Oracle文件中,basic文件夹里的dll文件,也拷贝到应用程序目录下,比如这些:
3.代码连接部分
4.常见错误
(1)提示Driver not load
确认前面的步骤是否正确,尤其是32位和64位要对应,如果程序是用32位的但是用mingw64位编译出来的库是用不了的。以及相应的库都要放到程序目录下。
(2)用MSVC编译时,提示msvc-version.conf loaded but QMAKE_MSC_VER isn't set
参考了其他人的文章,更换默认构建目录之后就解决了。
(3)MSVC编译时提示ori.lib文件打开有误
重新加载了pro文件,然后新建文件夹,将所用的sdk相关整理到一起之后解决了,不清楚是为什么,猜测可能跟文件路径长度有关?因为整理之前文件名路径很长,类似于:D:\Qt-Oracle\x64\instantclient-sdk-windows.x64-19.24.0.0.0dbru\instantclient_19_24\sdk\include。然后看了一下之前mingw编译成功的记录,发现就是路径长度有差异,换了个路径竟然真的OK了,有种瞎猫碰上死耗子的感觉,不具有太多参考价值