当我使用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的新手,我可能做错了什么。
谢谢。
答案 0 :(得分:0)
症状1:Qt Run(调试)应用程序崩溃(程序意外完成/崩溃)。 症状2:Qt Creator带有预先构建的Qt包(MaintenanceTool)。
症状3:安装freeTDS软件包后,缺少freeTDS驱动程序(libtdsodbc.so)。
症状4:在之前或缺少unixODBC时构建/配置Qt。
解压缩并解压缩包。
./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.x.x
在/usr/local/unixODBC/etc/odbc.ini中创建/修改条目
[MYDSN]
Driver = /usr/local/freeTDS/lib/libtdsodbc.0.so
Server = 192.168.x.x
Port = 51271
QSqlDatabase mydb = QSqlDatabase::addDatabase("QODBC");
mydb.setDatabaseName("MYDSN")
mydb.setUserName("name on Database");
mydb.setPassword(" password on Database");