qt写的程序连接oracle
首先需要编译oci,这个网上都有,大同小异,我随便试了一个教程就过了。
然后是打包windeployqt指令之后,发现可以在自己电脑上运行。但是转移到别的电脑上就报错,
driver not loaded
这个错误的教程都是让你把qt安装目录下的mingw中sqldrivers目录中的动态链接库拷过去就行,仔细查询发现windeployqt实际上会自动把这些库拷过去,这个不是错误发生原因。
查了很多教程,有一些教程提到了oci问题,所以我将oracle服务器上的oci.dll拷进了exe程序目录下,
unable to logon
继续以新关键词搜,这个时候发现,单独的oci.dll似乎并没有直接让qt程序连接数据库的能力,为什么我的电脑上能运行,是因为安装过oracle服务器端,系统的环境变量中指向了oracle安装路径的bin文件夹,所以程序实际上调用的是oracle里的oci.dll动态链接库。
按照这个逻辑,将整个oracle客户端加入环境变量path中可以解决问题,但是客户端太大了,我不可能为了几十m的小qt程序加一个几百m的oracle客户端。
仔细思考,为什么会报错?实际上是少了运行环境,在windows下更是简单直接,就是少了dll,oracle目录下的诸多dll不可能全都必须要。这个时候我发现数据库连接工具可以帮到我,我去navicat premium12.0.11下找,既然navicat能连接oracle,那肯定也有相应的dll,一般来说,这样的东西程序员并不会直接整合到其他的文件中去,很可能还是以单个文件的形式存在。
果然,navicat安装目录下,几乎全是各种各样的dll动态链接库,其中与oracle相关的还给你用文件夹包好了,
位于 instantclient_10_2下,含义为即时客户端,其中有三个dll
oci.dll
orannzsbb10.dll
oraociicus10.dll
把这三个dll拷贝到exe目录下,运行,问题解决