qt连接到Windows上的oracle数据库

时间:2015-04-08 07:40:30

标签: c++ oracle qt oci

在Windows 7上我安装了qt creator,现在我正在尝试连接到oracle数据库。我安装了oracle客户端和plsql / developer,一切正常。在qt创建者中我有错误:

  

QsqlDatabase:未加载QOCI驱动程序

qt documentation对我不起作用。是否清楚教程如何在不同的平台和情况下进行?

4 个答案:

答案 0 :(得分:3)

确定。我找到了解决方案。

文档说

  

设置INCLUDE =%INCLUDE%; c:\ oracle \ oci \ include

     

设置LIB =%LIB%; c:\ oracle \ oci \ lib \ msvc

     

cd%QTDIR%\ src \ plugins \ sqldrivers \ oci

     

qmake oci.pro

     

NMAKE

     

如果您不使用Microsoft编译器,请将nmake替换为make in   上面这一行。

make nmake 对我不起作用。因为我没有在我的机器上安装 Microsoft Visual c ++

我指示了如何执行此操作:

  1. 首先不要忘记安装qt源。在安装过程中,选中来源复选框。

  2. 然后下载并安装oracle客户端win32_11gR2_client.zip。在安装过程中选择运行时选项。(即使您在oracle客户端上使用64位操作系统下载32位版本)。它创建c:\ app \ user \ product \ client_1 ...目录

  3. 然后打开qt minGW命令行(开始 - >所有peograms - > qt [版本] - > [版本] - > MinGW [版本] - > Qt [版本]为桌面MinGW [版本])并移动到oci源文件夹:

  4.   

    cd C:\ Qt \ Qt [版本] \ [版本] \ Src \ qtbase \ src \ plugins \ sqldrivers \ oci

    1. 然后正如文档所述包括OCI(Oracle调用接口)路径和库:
    2.   

      设置INCLUDE =%INCLUDE%; c:\ app \ user \ product [版本] \ client_1 \ oci \ include

           

      设置LIB =%LIB%; c:\ app \ user \ product [版本] \ client_1 \ oci \ lib \ msvc

      5.通过执行以下两行来编译oci驱动程序:

        

      qmake oci.pro

           

      <强>的mingw32-使

      它将为您创建两个.dll文件 qsqloci.dll (发布版本)和 qsqlocid.dll (调试版本)

      1. 最后一步是将这两个文件复制到qtcreator安装文件夹中。 转到:
      2.   

        <强> C:\ Qt的\ Qt的[版本] \ [版] \ SRC \ qtbase \插件\ sqldrivers

        并将这些文件复制到:

          

        <强> C:\ Qt的\ Qt的[版本] \ [版本] \ mingw的[版] \插件\ sqldrivers

        你准备好了。要检查连接,请尝试以下代码:

        #include <QCoreApplication>
        #include <QtSql>
        #include <QDebug>
        
        int main(int argc, char *argv[])
        {
            QCoreApplication a(argc, argv);
        
            QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");
            db.setHostName("MY_IP_OR_HOST_NAME");
            db.setDatabaseName("XE");
            db.setUserName("test");
            db.setPassword("test_password");
        
            if (!db.open())
            {
                qDebug() << db.lastError().text();
            }
            else{
                qDebug() << "Wow opened";
            }
        
            return a.exec();
        }
        

答案 1 :(得分:1)

您应该使用QODBC的{​​{1}} instea。

答案 2 :(得分:0)

gogagubi答案很好,但第4步对我不起作用,因为设置INCLUDELIB不适用于mingw32-make

需要在INCPATH中设置LIBSoci.pro或使用:

qmake "INCPAH +=c:\app\user\product[version]\client_1\oci\include 
       LIBS +=-Lc:\app\user\product[version]\client_1\oci\lib\msvc" oci.pro

将以下行添加到oci.pro

INCPATH +=c:\app\user\product[version]\client_1\oci\include
LIBS+=-Lc:\app\user\product[version]\client_1\oci\lib\msvc

答案 3 :(得分:0)

ciao tutto; 您可以使用QODBC驱动程序连接到oracle db(如果存在);(存在Qt窗口中的默认值),如下所示:

QSqlDatabase db=QSqlDatabase::addDatabase("QODBC");
   db.setConnectOptions();
   db.setDatabaseName("Driver={Microsoft ODBC for Oracle};Server=127.0.0.1:1521;Uid=ep;Pwd=605605");
   if(!db.open())
       exit(0);

   QSqlQuery query(db);
   query.exec("select * from t");
   while(query.next())
       QMessageBox::information(0,"",query.value(1).toString());

这已连接并允许执行查询; buona fortuna;