根据其他人的经验可以成功生成达梦的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,