[英]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的新手,我可能做錯了什么。
謝謝。
症狀1:Qt Run(調試)應用程序崩潰(程序意外完成/崩潰)。 症狀2:帶有預構建的Qt軟件包(MaintenanceTool)的Qt Creator。
症狀3:安裝freeTDS軟件包后,缺少freeTDS驅動程序(libtdsodbc.so)。
症狀4:Qt在unixODBC之前或缺少的情況下構建/配置。
解壓縮並解壓縮軟件包。
./configure --prefix=/usr/local/unixODBC
(確保可以編寫OR sudo)
make sudo make istall
解壓/解壓縮軟件包。
./configure --prefix=/usr/local/freeTDS --with-unixodbc=/usr/local/unixODBC/
make
sudo make istall
注意:-- --with-unixodbc
將導致安裝驅動程序(libtdsodbc.so)。
不幸的是,可能應該重建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/
(無需配置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
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.