QSqlDatabase:未加载QSQLITE驱动程序 - 仅在调试模式下

时间:2017-10-18 13:35:42

标签: c++ qt sqlite

我正在我的代码中尝试连接到SQLite数据库:

bool MainWindow::connOpen(){

mydb=QSqlDatabase::addDatabase("QSQLITE");

//qDebug ( )  <<  QSqlDatabase::drivers();

QString dbpath = "dbname.sqlite";
mydb.setDatabaseName(dbpath);
}

它给出了错误消息:&#34; QSqlDatabase:QSQLITE驱动程序未加载&#34; 以及错误窗口&#34;驱动程序未加载驱动程序未加载&#34;。 QSqlDatabase mydb声明位于MainWindow头文件中。

奇怪的是,这只发生在调试模式下,在发布模式下一切都很好。甚至更奇怪,这曾经是(我认为)自动QT更新之前的工作。我使用的是QTCreator 4.4.1和QT 5.9.2。另外,我检查过,sqlite.dll是在sqldrivers文件夹中,我理解它应该是。但由于某些原因,Qt文件夹被称为QT 5.9.1,与我的实际版本不同,只是这似乎没有任何影响。其他一切都很好。

另外,当我取消注释QSqlDatabase :: drivers();行,调试模式下的输出是(),而在发布模式下我得到(&#34; QSQLITE&#34;,&#34; QMYSQL&#34;,&#34; QMYSQL3&#34;,&#34; QODBC& #34;,&#34; QODBC3&#34;,&#34; QPSQL&#34;,&#34; QPSQL7&#34;)。显然,没有找到司机。

有没有人知道调试和发布之间的差异可能来自哪里?非常感谢!

2 个答案:

答案 0 :(得分:1)

总结为答案:

发布构建工作正常,但调试失败是因为在Windows上每个插件实际上有2个文件 - 在这种情况下是qsqlite.dllqsqlited.dll。带有 d 的那个用于调试版本,另一个用于版本构建。

由于缺少调试版本,重新安装Qt是获取丢失文件的唯一方法。

答案 1 :(得分:-1)

就我而言: 所以不起作用:

db = QSqlDatabase::addDatabase("QSQLITE", "MyConnection"); //MyConnection as connection name - Driver not loaded

它有效:

db = QSqlDatabase::addDatabase("QSQLITE");

两个版本都可以在Release中使用。

QT 5.10