Windows下Qt访问Oracle数据库,将编译好的qsqloci(d).dll文件,在客户环境下,放在哪里?

fly4free 2019-06-06 02:20:18
我用的是 VS2010 + InstantClient 12.1.0.2.0 的 SDK + Qt5.5.1_msvc2010

现在情况是,qsqloci 编译好了,
放在了: C:\Qt\Qt5.5.1_msvc2010\5.5\msvc2010\plugins\sqldrivers 下面

基本连接代码写好了,可以运行,连接正常。

但我想要模拟客户环境时,就有点懵了,因为也不能在客户那装个 Qt 啊
所以按照网络上找的 方法,把 sqldrivers 目录复制到我的程序所在目录下,
再双击我的程序……
Qt5Sqld.dll, Qt5Cored.dll 已经拷进去了,程序可以运行。
但是在 QSqlDatabase::addDatabase("QOCI") 时出现:QSqlDatabase: QOCI driver not loaded

【这个情况是这样,刚试的时候是成功的,我又把程序目录下的 sqldrivers 目录改名了,居然仍能正确执行,半天才发现 Qt 安装目录下的那个 sqldrivers 目录下,我用 VS2010 调试证明了,加载的就是那个目录下的,后来我就把那个目录下的删除了,不能改名,因为更后来我又发现,只要在那个目录就能自动识别。。。。】

后来我又根据vs2010(因为它会提示加载了那些dll),总结出需要的 qt,oracle 相关dll 列表
Qt5Sqld.dll
Qt5Cored.dll
qsqlocid.dll 我测试时用的调试版
oci.dll
oraociei12.dll
oraons.dll

程序目录复制了一份,sqldrivers 子目录也复制了一份,故障依旧。

然后我就想了,可能内部代码自动找到了 “qt安装目录下的【插件目录】”
可是客户环境99%以上不会安装qt开发环境,

这怎么整?
...全文
340 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fly4free 2019-06-06
  • 打赏
  • 举报
回复
暂时搞定了。
在 qt 命令行执行命令:"windeployqt 我的程序.exe" 它就把有用的东西(包括目录之类的)都复制到当前目录了
复制结果和我理解的没差别,就是不知道之前为啥不行。。。
等等到明天,看看是否仍旧正常不……

虽然期间我也把plugin源码文件 qsql_oci.cpp, qsql_oci_p.h 加入到自己的工程里,做些修改,然后:

QSqlDatabase::registerSqlDriver("MYQOCI", new QSqlDriverCreator<QOCIDriver>);
QSqlDatabase db = QSqlDatabase::addDatabase("MYQOCI");

也可以,哈哈哈。

不过,当我想把其单独弄一个库出来,结果又编译不过去了,明明之前编译过去了……
浮一大白开水 2019-06-06
  • 打赏
  • 举报
回复
就是qt库目录\plugins\platforms 主要是qwindows.dll,没有这个,windows下界面无法显示。
fly4free 2019-06-06
  • 打赏
  • 举报
回复
引用 2 楼 hzh_Beyond 的回复:
数据库是使用的mysql,


感谢,不过你的 platforms 目录里面是啥?
浮一大白开水 2019-06-06
  • 打赏
  • 举报
回复
数据库是使用的mysql,
浮一大白开水 2019-06-06
  • 打赏
  • 举报
回复
这个是我发布的程序目录,我是将程序所依赖的文件都放置在程序目录下解决的问题,希望可以帮到你。

16,215

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧