检测是不是安装了 Microsoft Access 驱动程序
Posted
技术标签:
【中文标题】检测是不是安装了 Microsoft Access 驱动程序【英文标题】:Detect that the Microsoft Access driver are installed检测是否安装了 Microsoft Access 驱动程序 【发布时间】: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
有什么想法吗?最好是可移植的代码。
【问题讨论】:
相关:***.com/questions/4051147/odbc-driver-use-in-qt 【参考方案1】:如果您可以访问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.
有关返回值的更多详细信息,请参见此处:https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/sqlconnect-function
【讨论】:
暂时没有时间测试 QT,我不想降到 Windows 级别。希望我会在研究后回来。 @Liviu:SQLSTATE 是 odbc 规范的一部分,如果您无法从QSqlError
对象访问它的值,我会感到惊讶。但我不知道 qt。
doc.qt.io/qt-5/qsqlerror.html#nativeErrorCode 这应该需要 5 分钟,但我刚刚辞掉了那份工作 :D。我将安装 QT 尝试几个小时,但不是现在。我不会忘记你的回答,谢谢!以上是关于检测是不是安装了 Microsoft Access 驱动程序的主要内容,如果未能解决你的问题,请参考以下文章
Microsoft Access 备份文件是不是具有专有格式?
根据 Microsoft Access 中的日期自动发送电子邮件
[Access][Microsoft][ODBC 驱动程序管理器] 无效的字符串或缓冲区长度 Invalid string or buffer length
inno setup怎么检测系统是不是安装了vcredist