gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 05:28:11 25 4
gpt4 key购买 nike

当我使用 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 的新手,我可能做错了什么。

谢谢。

最佳答案

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

症状 1:Qt Run (Debug) 应用程序崩溃(程序意外结束/崩溃)。症状 2:带有预构建 Qt 包的 Qt Creator (MaintenanceTool)。

症状三:安装freeTDS包后缺少freeTDS驱动(libtdsodbc.so)

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

  1. 下载并安装 unixODBC(必须在安装 freeTDS 之前完成)( www.unixODBC.org )/(驱动程序)/(unixODBC-2.3.4.tar.gz)

解压缩包。

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

制作
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"

    制作

如果一切顺利:您将获得符合 QODBC 的新库:

cd ../plugins/sqldrivers/

例如将新包复制到:

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

(无需配置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

    服务器 = 192.168.x.x

    端口 = 51271

    1. 在 Qt 项目中:

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

    mydb.setDatabaseName("MYDSN")

    mydb.setUserName("数据库名称");

    mydb.setPassword("数据库密码");

关于c++ - 使用 ODBC 驱动程序时 Qt 应用程序崩溃 (macOS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40093807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com