簡體   English   中英

使用ODBC驅動程序(macOS)時Qt應用程序崩潰

[英]Qt application crashing when using ODBC driver (macOS)

當我使用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();
}

出現的錯誤: 錯誤

我確定代碼沒有問題,因為我已經在Windows機器上嘗試過了。 我也確實用qmake構建了ODBC驅動程序。

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

謝謝。

在Mac OS((Seirra))上針對MSSQL或任何其他ODBC DB激活/測試QODBC的步驟:

症狀1:Qt Run(調試)應用程序崩潰(程序意外完成/崩潰)。 症狀2:帶有預構建的Qt軟件包(MaintenanceTool)的Qt Creator。

症狀3:安裝freeTDS軟件包后,缺少freeTDS驅動程序(libtdsodbc.so)。

症狀4:Qt在unixODBC之前或缺少的情況下構建/配置。

  1. 下載並安裝unixODBC( 必須在安裝freeTDS之前完成 )( www.unixODBC.org )/(驅動程序)/(unixODBC-2.3.4.tar.gz)

解壓縮並解壓縮軟件包。

./configure --prefix=/usr/local/unixODBC (確保可以編寫OR sudo)

make sudo make istall

  1. 下載並安裝freeTDS:( http://www.freetds.org/ )/(快速鏈接)/(最新版本)/(穩定版本)

解壓/解壓縮軟件包。

./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

如果一切正常:您將獲得符合QODBC的新庫:

cd ../plugins/sqldrivers/

將新軟件包復制到:

/usr/local/Qt/5.9.1/clang_64/plugins/sqldrivers/
  1. 配置/etc/local/unixODBC/etc/odbc.ini(您可能需要root權限才能進行mdify)

(無需配置freeTDS):

  • 哪個端口?哪個版本 ->運行/usr/local/freeTDS/bin/tsql -LH 192.168.xx
  • 在/usr/local/unixODBC/etc/odbc.ini中創建/修改條目

    [MYDSN]

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

    Server = 192.168.xx

    Port = 51271

    1. 在Qt項目中:

    QSqlDatabase mydb = QSqlDatabase::addDatabase("QODBC");

    mydb.setDatabaseName("MYDSN")

    mydb.setUserName("name on Database");

    mydb.setPassword(" password on Database");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM