qtsql连接达梦数据库

odbc

window和linux都有odbc的中间件,可以通过odbc中间件配合qtsql连接数据库

  • windows下配置odbc
  • linux配置odbc

apt install unixodbc unixodbc-dev

/etc/odbcinst.ini配置

ini 复制代码
[DM8 ODBC DRIVER]
Description=DM8 ODBC Driver
DRIVER=/opt/dmdbms/bin/libdodbc.so

/etc/odbc.ini配置

ini 复制代码
[dm8]
Description=DM8 Database
DRIVER=DM8 ODBC DRIVER
SERVER=localhost
TCP_PORT=5236
UID=SYSDBA
PWD=SYSDBA

isql -v dm8测试连接是否成功

qt

使用qt6 构建项目

c 复制代码
aux_source_directory(. code)
find_package(Qt6 COMPONENTS REQUIRED Core Sql Gui Widgets Network PATHS d:/tools/qt/6.6.0/msvc2019_64/lib/cmake)

add_executable(dameng ${code})
target_link_libraries(dameng Qt6::Core Qt6::Sql)

chatgpt提示的代码如下:

c 复制代码
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlRecord>
#include <QSqlError>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 添加数据库驱动
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    // 设置数据库文件路径
    db.setDatabaseName("dm");

    // 打开数据库
    if (!db.open()) {
        qDebug() << "Failed to open database:"<<db.lastError().text();
        return -1;
    }

    // 创建查询对象
    QSqlQuery query;
    // 执行查询语句
    if (!query.exec("SELECT * FROM \"SYS\".sysuser$")) {
        qDebug() << "Query failed: " << query.lastError().text();
        return -1;
    }

    QSqlRecord record = query.record();
    // 遍历查询结果
    while (query.next()) {
        for (int i = 0; i < record.count(); ++i) {
            qDebug() << record.fieldName(i) <<":"<< query.value(i).toString();
        }
        qDebug()<<"--------------------";
    }

    // 关闭数据库
    db.close();

    return a.exec();
}

exception

  • no driver load

qtsql的driver在plugin的sqldriver目录里面,通过动态加载目录里面的文件加载driver

  • 加密模块加载失败, HY000 QODBC: Unable to connect

达梦数据库bin文件中,拷贝ssleay32、libeay32两个文件

  • isql 提示[ISQL]ERROR: Could not SQLConnect

检查/etc/odbc.ini中的配置是否正确,driver和odbcinst.ini的名称一致

  • 提示libdodbc.so找不到

ldd libdodbc.so 是否有找不到的文件,需要配置环境变量LD_LIBRARY_PATH

相关推荐
星星也在雾里2 小时前
PgBouncer 解决 PostgreSQL 连接数超限 + 可视化监控
数据库·postgresql
雨辰AI4 小时前
SpringBoot3 + 人大金仓读写分离 + 分库分表 + 集群高可用 全栈实战
java·数据库·mysql·政务
长城20244 小时前
关于MySql的ONLY_FULL_GROUP_BY问题
数据库·mysql·聚合列
常常有4 小时前
MySQL 底层执行原理:输入SQL语句到两阶段提交
数据库·sql·mysql
Mr. zhihao5 小时前
深入解析redis基本数据结构
数据结构·数据库·redis
m0_748839495 小时前
利用天正暖通CAD快速掌握风管数量统计的方法
数据库
随身数智备忘录5 小时前
什么是设备管理体系?设备管理体系包含哪些核心模块?
网络·数据库·人工智能
海市公约6 小时前
MySQL更新语句执行全流程:从Buffer Pool修改到二阶段提交
数据库·mysql·binlog·innodb·undo log·二阶段提交·update执行原理
颂love6 小时前
MySQL的执行流程
android·数据库·mysql
程序leo源7 小时前
Qt窗口详解
开发语言·数据库·c++·qt·青少年编程·c#