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

相关推荐
程序员侠客行37 分钟前
Mybatis二级缓存实现详解
java·数据库·后端·架构·mybatis
Tipriest_1 小时前
linux中的文本分接流tee命令介绍
linux·服务器·数据库
爱喝水的鱼丶1 小时前
SAP-ABAP:在SAP世界里与特殊字符“斗智斗勇”:一份来自实战的避坑指南
运维·服务器·数据库·学习·sap·abap·特殊字符
阿拉伯柠檬1 小时前
MySQL内置函数
linux·数据库·mysql·面试
小Mie不吃饭1 小时前
2025 Oracle小白零基础到入门的学习路线
数据库·oracle
麒qiqi1 小时前
SQLite3 数据库
数据库·oracle
不吃橘子的橘猫1 小时前
NVIDIA DLI 《Build a Deep Research Agent》学习笔记
开发语言·数据库·笔记·python·学习·算法·ai
程序 代码狂人1 小时前
DML,DDL,DCL,TCL
数据库
qinyia2 小时前
WisdomSSH解决MySQL频繁重启问题
数据库·mysql
松涛和鸣2 小时前
DAY42 SQLite3 : Dictionary Import and Data Query Implementation with C Language
linux·c语言·数据库·单片机·网络协议·sqlite