Qt 6.7 打开.mdb 文件,失败于 IM002 QODBC:无法连接

问题描述 投票:0回答:1

所以我想用Qt读取.mdb文件,但我卡在IM002 QODBC:无法连接。已经检查了这个问题中的位数和驱动程序名称:为什么我收到“未找到数据源名称且未指定默认驱动程序”以及如何修复它?仍然失败。

编辑并回答:原来在Qt 6.7中出现错误,相同的代码在Qt 6.6.3上运行顺利。所以如果有人和我有同样的头痛,你可以先检查一下 Qt 的旧版本。 这里是 Qt 论坛上指出 Qt 6.7 上的错误的链接

老问题从这里开始:

检查文件是否存在,返回true。 检查驱动程序是否存在且有效,返回true。 使用 MS Access 64 位创建一个虚拟文件(因为 mykit 是 Qt 6.7 64 位以避免 32 位与 64 位的差异)仍然会产生该错误。

这是我的代码片段

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
QString path = "F:\\SKJ Trial\\test data\\Dummy_64bit.mdb";
QString str_comm = "DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};FIL={MS Access};DBQ=";

qDebug() << "Is Db valid: " + QVariant(db.isValid()).toString();
qDebug() << "path: " + path;
qDebug() << "Is file exist: " + QVariant(QFile(path).exists()).toString();

str_comm += path;
db.setDatabaseName(str_comm);
qDebug() << "String command: " + str_comm;
db.open();

if(db.isOpen()){
    qDebug() << "Success";
} else {
    qDebug() << "Failed";
    qDebug() << db.lastError().text();
}

控制台日志在这里:

"Is Db valid: true"
"path: F:\\SKJ Trial\\test data\\Dummy_64bit.mdb"
"Is file exist: true"
"String command: DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};FIL={MS Access};DBQ=F:\\SKJ Trial\\test data\\Dummy_64bit.mdb"
Failed
"[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified, IM002 QODBC: Unable to connect"

我什至尝试读取一个不存在的文件来比较错误代码,并返回相同的错误代码(好吧,它应该是 True,因为它是一个不存在的文件)。但这让我觉得该函数无法正确获取文件地址。

"Is Db valid: true"
"path: F:\\SKJ Trial\\test data\\Dummy_64bi.mdb"
"Is file exist: false"
"String command: DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};FIL={MS Access};DBQ=F:\\SKJ Trial\\test data\\Dummy_64bi.mdb"
Failed
"[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified, IM002 QODBC: Unable to connect"

即使将反斜杠替换为正斜杠也无法连接。

"Is Db valid: true"
"path: F:/SKJ Trial/test data/Dummy_64bit.mdb"
"Is file exist: true"
"String command: DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};FIL={MS Access};DBQ=F:/SKJ Trial/test data/Dummy_64bit.mdb"
Failed
"[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified, IM002 QODBC: Unable to connect"

如果我遗漏了什么,有人可以帮助我吗?

qt ms-access
1个回答
0
投票

原来在Qt 6.7中出现错误,相同的代码在Qt 6.6.3上运行顺利。所以如果有人和我有同样的头痛,你可以先检查一下 Qt 的旧版本。 这里是 Qt 论坛上指向 Qt 6.7 上的错误的链接

我再说一遍,代码中没有错误,这是 Qt 6.7 上存在的错误。如果您在其他版本上发现同样的问题,您可以先在Qt论坛上搜索一下,看看是否是一个bug。

© www.soinside.com 2019 - 2024. All rights reserved.