专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

QT 5.12.11 编译 oracle 11 驱动(详细图文教程02)

ins518 2024-10-26 12:13:12 技术文章 7 ℃ 0 评论

注意点:

这里以64位为例子,oracle 11的版本和编译驱动的编译器都选择64位。如果你要32位驱动做对应的选择。


安装oracle 11客户端完整版本


安装QT,组件的选择如下:

修改项目工程文件,编译代码

修改oci.pro文件

文件路径 D:\alantop_sde\Qt\5.12.5\Src\qtbase\src\plugins\sqldrivers\oci

文件名 oci.pro

如下图部分修改:

注释掉一行,增加三行

#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

修改qsqldriverbase.pri 注释如下行


编译时出现错误,代码部分的修改

修改2个地方 修改源码 qsql_oci.cpp 1559行

1. 修改函数名称 OCIBindByPos2改为OCIBindByPos

2. 把bindColum.lengths 变量做指针转换 reinterpret_cast<ub2*>(bindColumn.lengths),

编译会出现如下警告,不影响生成的dll文件。

修改后编译后,在 D:\plugins\sqldrivers 目录下生成如下驱动文件

把qt oracle oci库 拷贝到指定目录下

把oci.dll,oci.lib添加到QT bin目录下(如:D:\alantop_dir\alantop_ide\Qt\Qt5.12.9\5.12.9\mingw73_64\bin),(如果不够把oci.dll下所有文件拷贝到这里)

把上图生成的4个文件拷贝sqldrivers目录下(如:D:\alantop_dir\alantop_ide\Qt\Qt5.12.9\5.12.9\mingw73_64\plugins\sqldrivers)

上图的四个文件拷贝到你写的项目目录下和exe一起。

使用oracle驱动

在pro文件增加如下行

QT += sql

测试代码如下

#include <QCoreApplication>

#include <QSqlDatabase>

#include <QtGlobal>

#include <QtDebug>

#include <QSqlError>

#include <QSqlQuery>

#include <QSqlRecord>

#include <QSqlField>


int main()

{
  
    qDebug()<<"Available drivers:";
  


    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()<<("TableName的字段个数:")<<rec.count();
          
            QSqlField filed = rec.field(0);
          
          qDebug()<<("字段名称:")<<rec.field(0).name()<<("字段类型:")<<rec.field(0).type()<<("字段值:")<<rec.field(0).value();
          
          qDebug()<<("段名称:")<<rec.field(1).name()<<("字段类型:")<<rec.field(1).type()<<("字段值:")<<rec.field(1).value();
          
          qDebug()<<("字段名称:")<<rec.field(2).name()<<("字段类型:")<<rec.field(2).type()<<("字段值:")<<rec.field(2).value();
          
          qDebug()<<("字段名称:")<<rec.field(3).name()<<("字段类型:")<<rec.field(3).type()<<("字段值:")<<rec.field(3).value();
          
        }
      
        else
          
        {
          
          //qDebug()<<tr("error");
          
        }
      
    }
  



}

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表