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

被折叠的 条评论
为什么被折叠?



