QT5.5连接oracle失败

装B侠 2016-03-24 10:34:22
我已经按照网上帖子,下载了相应的dll 放在了sqldrivers中, 现在报错是

QSqlDatabase: QOCI driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QOCI QOCI8 QODBC QODBC3 QPSQL QPSQL7

显示我的可选驱动中已经有了QOCI了 可是 为什么还是显示驱动没有加载?


bool createConnection()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");
db.setHostName("TJBMPQ4PJAFBLJP");
db.setDatabaseName("orcl");
db.setUserName("scott");
db.setPassword("123");

if(!db.open()) {
QMessageBox::critical(NULL,"","Open failed");
return false;
}
return true;
}


这是测试代码
这个问题困扰我好久了,有大神给小弟解答一下吗
...全文
1261 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
陈good里 2018-07-25
  • 打赏
  • 举报
回复
QOCI驱动和Oracle不匹配,32位的QOCI驱动不能访问64位的Oracle,之前我也有这个问题,Oracle是64位的,重新装了32位后就能连接上了。
xqhrs232 2017-12-19
  • 打赏
  • 举报
回复
关注qt数据库的应用!
qq_36921303 2017-12-18
  • 打赏
  • 举报
回复
我也是突然连接不上去了,求解啊!!!!!!!!!!!
走好每一步 2017-12-10
  • 打赏
  • 举报
回复
driver not load就是驱动没加载,一般是缺少动态库导致。
惘客 2017-12-09
  • 打赏
  • 举报
回复
解决了吗?我遇到了同样的问题,不同的是我曾经连接成功过,后来不知道怎么回事同样的代码再也连不上了,折腾半天,想不明白哪里的问题?
  • 打赏
  • 举报
回复
如果Oracle的驱动是拷贝别人的,建议自己编译下试试。
hidxl 2016-12-01
  • 打赏
  • 举报
回复
估计是动态加载的动态库没有正常加载。
dl7997 2016-11-30
  • 打赏
  • 举报
回复
你好 你最后解决了么 QStringList drivers1 = QSqlDatabase::drivers(); QSqlDatabase db = QSqlDatabase::addDatabase("QOCI","orcl"); bool validDriver = db.isDriverAvailable("QOCI"); bool valid = db.isValid(); db.setHostName("localhost"); db.setDatabaseName("orcl"); db.setUserName("id"); db.setPassword("prod$ID"); db.setPort(1521); //db.setConnectOptions("OCI_ATTR_PREFETCH_ROWS"); if (db.open()) { printf("打开成功/n"); } else { printf("打开失败/n"); } 没有报错 一直 连不上是什么原因呢, 确认 用户名密码没问题 plsql,navicate都可以连上的
ibm123 2016-03-29
  • 打赏
  • 举报
回复
首先,你的程序运行环境有没有安装oracle服务器或者客户端。 其次,如果不想安装庞大的oracle,到官网下载instantclient-basic,就几个文件放在程序目录即可。注意oci.dll依赖vc的库。
donwmufromdying 2016-03-29
  • 打赏
  • 举报
回复
把oracle相关的clientlib dll文件copy到系统路径里去(比如:C:\windows\system32)
装B侠 2016-03-25
  • 打赏
  • 举报
回复
引用 3 楼 qq423399099 的回复:
楼主试一下楼主说的QT+=sql,然后切记要删掉build-XX-XX文件夹删掉以后重新生成 还有个方法有点土就是用QT自带 loadlibrary 自己加载oci.dll库位置。

QLibrary *hello_lib = NULL;  
//写清楚库的路径,如果放在当前工程的目录下,路径为./Oracle.so  
hello_lib = new QLibrary("C:\\oracle\\product\\10.2.0\\client_1\\BIN\\oci.dll");  
  
//加载动态库  
hello_lib->load();  
if (!hello_lib->isLoaded())  
{  
    printf("load Oracle failed!\n");  
    return ;  
}
两种方法我都试过了,还是没用啊,不过还是谢谢你们。 我打印驱动 "QSQLITE" "QMYSQL" "QMYSQL3" "QOCI" "QOCI8" "QODBC" "QODBC3" "QPSQL" "QPSQL7" 已经有可是就是用不了。
小灸舞 2016-03-25
  • 打赏
  • 举报
回复
楼主试一下楼主说的QT+=sql,然后切记要删掉build-XX-XX文件夹删掉以后重新生成 还有个方法有点土就是用QT自带 loadlibrary 自己加载oci.dll库位置。

QLibrary *hello_lib = NULL;  
//写清楚库的路径,如果放在当前工程的目录下,路径为./Oracle.so  
hello_lib = new QLibrary("C:\\oracle\\product\\10.2.0\\client_1\\BIN\\oci.dll");  
  
//加载动态库  
hello_lib->load();  
if (!hello_lib->isLoaded())  
{  
    printf("load Oracle failed!\n");  
    return ;  
}
画茧自缚 2016-03-25
  • 打赏
  • 举报
回复
有没有在.pro文件中添加 QT += sql ?
装B侠 2016-03-25
  • 打赏
  • 举报
回复
第一发贴啊,不要沉啊

16,212

社区成员

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

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