检测Microsoft Access驱动程序安装
问题描述:
我可以用下面的代码连接到一个老Access
数据库:检测Microsoft 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
任何想法?优选便携式代码。
答
如果您可以访问SQLSTATE
,请检查IM002
的SQLState。我认为IM002
总是返回如果驱动程序无法找到/加载,而如果例如数据库文件不能被发现,因为道路是错误的,你会得到一个HY000
SQLSTATE
:
对于无效驱动程序字符串,我得到:
SQLSTATE IM002; Native Error: 0; [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
对于无效路径获得:
SQLSTATE HY000; Native Error: -1044; [Microsoft][ODBC Microsoft Access Driver] Not a valid file name.
看到这里FO r有关返回值的更多详细信息:https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/sqlconnect-function
相关:https://stackoverflow.com/questions/4051147/odbc-driver-use-in-qt – Liviu