使用ODBC驱动程序(macOS)时Qt应用程序崩溃

时间:2016-10-17 19:04:15

标签: c++ oracle qt odbc

当我使用ODBC驱动程序连接到Oracle数据库时,我的Qt应用程序崩溃了。 问题是堆栈溢出。 我的代码是

#include "mainwindow.h"
#include <QApplication>
#include <QSqlDatabase>
#include <QDebug>
#include <QSqlError>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QSqlDatabase db= QSqlDatabase::addDatabase("QODBC3");
    db.setUserName("SYS");
    db.setPassword("oracle");
     if (!db.open()) {
        qDebug() << db.lastError().text();
     } else {
        qDebug("success");
     }
     MainWindow w;
     w.show();
     db.close();
     return a.exec();
}

出现的错误: error

我确信代码没有问题,因为我已经在Windows机器上试过了。 我也用qmake构建了ODBC驱动程序。

我是Qt的新手,我可能做错了什么。

谢谢。

1 个答案:

答案 0 :(得分:0)

在Mac OS((Seirra)上针对MSSQL或任何其他ODBC DB激活/测试QODBC的步骤:

症状1:Qt Run(调试)应用程序崩溃(程序意外完成/崩溃)。 症状2:Qt Creator带有预先构建的Qt包(MaintenanceTool)。

症状3:安装freeTDS软件包后,缺少freeTDS驱动程序(libtdsodbc.so)。

症状4:在之前或缺少unixODBC时构建/配置Qt。

  1. 下载并安装unixODBC(必须在安装freeTDS之前完成) (www.unixODBC.org)/(司机)/(unixODBC-2.3.4.tar.gz)
  2. 解压缩并解压缩包。

    ./configure --prefix=/usr/local/unixODBC(确保你可以写OR sudo)

    make sudo make istall

    1. 下载并安装freeTDS: (http://www.freetds.org/)/(快速链接)/(最新版本)/(稳定版)
    2. 解压缩/解压缩包。

      ./configure --prefix=/usr/local/freeTDS --with-unixodbc=/usr/local/unixODBC/

      make
      

      sudo make istall

      注意:--with-unixodbc将导致安装驱动程序(libtdsodbc.so)。

      1. 不幸的是,可能应该重建Qt上的ODBC插件:

        • 如果您使用预建的Qt库,则需要使用MaintenanceTool($ QTDIR / MaintenanceTool.app)下载源

        • 告诉qmake在哪里可以找到unixODBC头文件和共享库(这里假设unixODBC安装在/ usr / local / unixODBC中)并运行make:

        cd $QTDIR/qtbase/src/plugins/sqldrivers/odbc

        我的情况:cd /usr/local/Qt/5.9.1/Src/qtbase/src/plugins/sqldrivers/odbc

        qmake "INCLUDEPATH+=/usr/local/unixODBC/include" "LIBS+=-L/usr/local/unixODBC/lib -lodbc"

        make

      2. 如果这是正确的:你将得到编译的QODBC新库:

        cd ../plugins/sqldrivers/
        

        将新包复制到:

        /usr/local/Qt/5.9.1/clang_64/plugins/sqldrivers/
        
        1. 配置/etc/local/unixODBC/etc/odbc.ini(您可能需要 root权限来修改mdify)
        2. (无需配置freeTDS):

          • 哪个端口?哪个版本 - &gt;运行 /usr/local/freeTDS/bin/tsql -LH 192.168.x.x
          • 在/usr/local/unixODBC/etc/odbc.ini中创建/修改条目

            [MYDSN]

            Driver = /usr/local/freeTDS/lib/libtdsodbc.0.so

            Server = 192.168.x.x

            Port = 51271

              在Qt项目中
            1. QSqlDatabase mydb = QSqlDatabase::addDatabase("QODBC");

              mydb.setDatabaseName("MYDSN")

              mydb.setUserName("name on Database");

              mydb.setPassword(" password on Database");