qt生成达梦oci的一个坑

博客讲述了在使用Qt连接达梦数据库时遇到的问题及解决方案。首先,尝试将oci.dll放入qt的sqldrivers目录下,但仍然出现驱动未加载的错误。接着,通过将达梦bin目录引入到Qt工程,错误变为无法登录(3113,创建socket失败)。作者发现需要修改qt源码qsql_oci.cpp,将连接字符串改为只包含IP和端口的格式,并确保达梦默认端口5236已打开。最后,问题得到解决,成功连接达梦数据库。

根据其他人的经验可以成功生成达梦的oci,但是将oci.dll文件放在qt的sqldrivers文件夹内还是会报错,driver not loaded,此时将达梦的bin引入到qt工程中,报错变成了(3113,cannot logon,创建socket失败),
这里就要转到qt的oci工程下,修改qsql_oci.cpp文件,C:\Qt\Qt5.9.6\5.9.6\Src\qtbase\src\plugins\sqldrivers\oci;

修改函数bool QOCIDriver::open(const QString & db,
const QString & user,
const QString & password,
const QString & hostname,
int port,
const QString &opts)
{…
将 QString::fromLatin1(“(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=%1)(Port=%2))(CONNECT_DATA=(SID=%3)))”).arg(hostname).arg((port > -1 ? port : 1521)).arg(db);

修改为QString::fromLatin1(“%1:%2”).arg(hostname).arg((port > -1 ? port : 1521));//用于DM
//
}
参数只写ip:端口号,这里和Oracle是不同。
感谢KingRing的指导,后面查看达梦的手册,就只看到参数只写hostname也是能连上,前提是已经打开了默认端口5236,

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值