【问题标题】:Qt sqlite issue at deployement : driver not loaded部署时的 Qt sqlite 问题:未加载驱动程序
【发布时间】:2018-02-21 03:57:43
【问题描述】:

正如标题所说,我已经有这个问题好几天了。我的程序在 QtCreator 的调试模式下运行良好,但是一旦我选择发布模式,我就会遇到 sql driver not loaded 问题(我只在 Windows 10 上运行过)。我相信我的 .pro 文件已正确写入(已写入 QT += sql)。

我已经尽力了:

  • windeployqt.exe .
  • 将插件自己移动到可执行文件夹中的 sqldrivers 子文件夹中,该文件夹包含 Qt 安装路径提供的所有 sqldrivers,并且还移动到可执行文件夹 Qt5Sql.dll 中
  • 我还尝试使用 sqlite 网站提供的 sqlite3.dll 并将其移动到(一一测试)可执行文件夹和 sqldrivers 子文件夹中。

正如我所说,该问题仅发生在部署时,所以我想知道是否应该将某些内容添加到我的 .pro 文件中。 我的 Windows 操作系统上没有安装任何 sql 程序。如果这是我认为的问题,我想知道如何强制我的程序使用 sqldrivers 子文件夹中提供的插件。

错误:

QSqlDatabase: QSQLITE driver not loaded
QSqlDatabase: available drivers: 
QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins
QSqlQuery::exec: database not open

编辑:我设法解决了这个问题。这个问题来自我没想到的东西。我正在使用全局变量,其中一个是我的数据库,我通过再次读取错误来意识到这一点,因为似乎数据库是在 main.cpp 的第一行(在#include)之前加载的。所以现在我每次使用它时都在使用打开和关闭数据库。有什么方法可以声明一个全局数据库(一直保持打开状态)?我正在使用它。

【问题讨论】:

    标签: c++ windows qt sqlite


    【解决方案1】:

    是的,您可以打开您的数据库一次,然后只需使用 QSqlDatabase 类的静态公共方法:

    QSqlDatabase my_db = QSqlDatabase::addDatabase("QSQLITE");
    my_db.setDatabaseName("my_db_name.sqlite");
    
    if(my_db.open())
    {
        my_db.exec("create table person (id int primary key, "
            "firstname varchar(20), lastname varchar(20))");
    }
    else
    {
        qDebug() << my_db.lastError().text();
    } 
    

    然后在另一个地方:

    QSqlDatabase db = QSqlDatabase::database();
    
    if(db.isOpen())
    {
        qDebug() << "Wow";
        db.exec("insert into person values(101, 'Danny', 'Young')");        
    }
    

    查看QSqlDatabase::addDatabase(),必要时使用参数connectionName

    【讨论】:

    • 好的,谢谢!虽然我使用我自己的类作为我的数据库,因为我需要很多功能。我将在我的课堂上实现这个功能。编辑:既然你提到它,我没有意识到它们是静态的,我会试一试,我想我可以感谢你!
    猜你喜欢
    • 2016-01-14
    • 2014-12-17
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    相关资源
    最近更新 更多