我正在尝试在我的代码中连接到 SQLite 数据库:
bool MainWindow::connOpen(){
mydb=QSqlDatabase::addDatabase("QSQLITE");
//qDebug ( ) << QSqlDatabase::drivers();
QString dbpath = "dbname.sqlite";
mydb.setDatabaseName(dbpath);
}
这给了我错误消息:
QSqlDatabase:QSQLITE 驱动程序未加载
以及错误窗口:
驱动程序未加载 驱动程序未加载
QSqlDatabase mydb
声明位于MainWindow
头文件中。
奇怪的是,这只发生在 Debug 模式下,在 Release 模式下,一切正常。更奇怪的是,这在(我认为)自动 Qt 更新之前曾经有效。
我正在使用:
另外,我检查了 sqlite.dll 是否在 sqldrivers 文件夹中,我认为它应该在其中。但由于某种原因Qt文件夹被称为Qt 5.9.1,与我的实际版本不同,只有这个似乎没有任何效果。其他一切都很好。
此外,当我取消注释
QSqlDatabase::drivers();
行时,调试模式下的输出为:
()
在发布模式下,我得到:
(“QSQLITE”、“QMYSQL”、“QMYSQL3”、“QODBC”、“QODBC3”、“QPSQL”、“QPSQL7”)
显然,没有找到驱动程序。
调试和发布之间的差异来自哪里?
发布版本可以工作,但调试失败的事实是因为在 Windows 上,每个插件实际上有 2 个文件 - 在本例中为
qsqlite.dll
和 qsqlited.dll
。带有 d 的用于调试版本,另一个用于发布版本。
由于缺少调试变体,重新安装 Qt 是找回丢失文件的唯一方法。
就我而言: 所以不起作用:
db = QSqlDatabase::addDatabase("QSQLITE", "MyConnection"); //MyConnection as connection name - Driver not loaded
并且有效:
db = QSqlDatabase::addDatabase("QSQLITE");
两个版本都可以在 Release 中使用。
QT 5.10