【发布时间】:2017-06-28 09:14:01
【问题描述】:
我可以使用以下代码连接到旧的 Access 数据库:
bool LoadDb(const QString& file_path, QSqlDatabase& db_out, QSqlError& err)
{
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
static const auto DRIVER_NAME = R"({Microsoft Access Driver (*.mdb, *.accdb)})";
const auto connection_string = QString(R"(Driver=%1;DSN='';DBQ=%2)").arg(DRIVER_NAME, file_path);
db.setDatabaseName(connection_string);
if (!db.open())
{
err = db.lastError();
return false;
}
db_out = std::move(db);
return true;
}
但我想先测试一下驱动程序(“Microsoft Access 数据库引擎”)是否已安装,以便我可以向用户显示一条有意义的消息。
以下连接字符串不起作用:
const auto connection_string = QString(R"(Driver=%1)").arg(DRIVER_NAME);
错误没有任何意义......而且是法语:
[Microsoft][Pilote ODBC Microsoft Access]Erreur générale Impossible d'ouvrir la clé de Registre « Temporary (volatile) Ace DSN for process 0xa74 Thread 0xce4 DBC 0xb5518368 Jet ». QODBC3: Unable to connect
有什么想法吗?最好是可移植的代码。
【问题讨论】: