odbc
window和linux都有odbc的中间件,可以通过odbc中间件配合qtsql连接数据库
- windows下配置odbc
- linux配置odbc
apt install unixodbc unixodbc-dev
/etc/odbcinst.ini配置
[DM8 ODBC DRIVER]
Description=DM8 ODBC Driver
DRIVER=/opt/dmdbms/bin/libdodbc.so
/etc/odbc.ini配置
[dm8]
Description=DM8 Database
DRIVER=DM8 ODBC DRIVER
SERVER=localhost
TCP_PORT=5236
UID=SYSDBA
PWD=SYSDBA
isql -v dm8测试连接是否成功
qt
使用qt6 构建项目
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提示的代码如下:
#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