先编译qt 5.12.5 编译 oracle11g R2 驱动(需要修改源码2个地方)
1.下载安装oracle客户端 oracle11g R2 64位
·
2.安装qt 5.12
·
3..修改oci.pro文件
文件路径 D:\\alantop_sde\\Qt\\5.12.5\\Src\\qtbase\\src\\plugins\\sqldrivers\\oci
打开 oci.pro
注释掉一行,增加三行
<code>#QMAKE_USE += oci
QMAKE_LFLAGS += D:/oracle11g/product/11.2.0/client_1\\BIN/oci.dll
INCLUDEPATH += D:/oracle11g/product/11.2.0/client_1/oci/include
LIBPATH += D:/oracle11g/product/11.2.0/client_1/oci/lib/msvc/<code>
操作系统,数据库,编译器软件都选择64位 使用MinGw64
编译出现错误,修改源码
修改2个地方 修改源码 qsql_oci.cpp 1599行
1. 修改函数名称 OCIBindByPos2改为OCIBindByPos
2. 把bindColum.lengths 变量做指针转换 reinterpret_cast
修改后编译后,在 D:\\plugins\\sqldrivers 目录下生成驱动
4.建立qt oracle oci库 这个库需要拷贝到工程目录下
.pro文件增加
<code>QT += sql/<code>
<code>#include <qcoreapplication>
#include <qsqldatabase>
#include <qtglobal>
#include <qtdebug>
#include <qsqlerror>
#include <qsqlquery>
#include <qsqlrecord>
#include <qsqlfield>
int main()
{
qDebug()<
QStringList drivers=QSqlDatabase::drivers();
foreach(QString driver,drivers)
qDebug()<<driver>
QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");
qDebug() << "QT DB driver?" << db.isValid();
bool m_bIsConn;
db.setHostName("10.2.3.102");
db.setPort(1521);
db.setDatabaseName("");
db.setUserName("");
db.setPassword("");
if(db.open())
{
qDebug()<<qstring>
m_bIsConn = true;
}
else
{
qDebug()<
m_bIsConn = false;
qDebug()<<db.lasterror>
}
QSqlQuery query("SELECT * FROM tables");
while (query.next())
{
int iProNo = query.value(0).toInt();
QString sProName = query.value(1).toString();
qDebug()<< sProName;
}
if(m_bIsConn)
{
QSqlQuery query;
bool bSuccess = query.exec("select * from tables");
if(bSuccess)
{
QSqlRecord rec = query.record();
qDebug()<
QSqlField filed = rec.field(0);
qDebug()<
qDebug()<
qDebug()<
qDebug()<
}
else
{
//qDebug()</<db.lasterror>/<qstring>/<driver>/<qsqlfield>/<qsqlrecord>/<qsqlquery>/<qsqlerror>/<qtdebug>/<qtglobal>/<qsqldatabase>/<qcoreapplication>/<code>
}
}
}
"
閱讀更多 alantop 的文章