带有 Qt 的 SQLite 数据库无法发布可执行文件

Posted

技术标签:

【中文标题】带有 Qt 的 SQLite 数据库无法发布可执行文件【英文标题】:SQLite database with Qt fails for Release executable 【发布时间】:2022-01-01 01:14:47 【问题描述】:

我在调试版本(在 Qt Creator 中加载)和发布版本中都有此代码。使用 Qt Creator 时,数据库似乎可以毫无问题地打开,但在运行发布可执行文件时会失败。我已经将一些丢失的 .dll 文件从 Qt bin 文件夹复制到了发布文件夹,以使应用程序在没有“丢失 .dll”错误的情况下加载,但似乎 QSql 可能缺少其他一些先决条件?

#ifndef LOGIN_H
#define LOGIN_H

#include <QMainWindow>
#include <QtSql>
#include <QtDebug>
#include <QFileInfo>

QT_BEGIN_NAMESPACE
namespace Ui  class login; 
QT_END_NAMESPACE

class login : public QMainWindow

    Q_OBJECT

public:
    QSqlDatabase EPMS_db;

    void connClose()
    
        EPMS_db.close();
        EPMS_db.removeDatabase(QSqlDatabase::defaultConnection);
    
    bool connOpen()
    
        EPMS_db = QSqlDatabase::addDatabase("QSQLITE");
        EPMS_db.setDatabaseName("C:/SQLite/EPMS_1.db");

        if (!EPMS_db.open()) 
            qDebug()<<("Database failed to connect");
            return false;
        
        else 
            qDebug()<<("Database connected successfully");
            return true;
        
    

public:
    login(QWidget *parent = nullptr);
    ~login();

private slots:
    void on_pushButton_clicked();

private:
    Ui::login *ui;
;
#endif // LOGIN_H

【问题讨论】:

您的 login.cpp 看起来如何? 【参考方案1】:

已解决:将 plugins/sqldrivers 文件夹复制到包含发布可执行程序的同一文件夹中。

【讨论】:

以上是关于带有 Qt 的 SQLite 数据库无法发布可执行文件的主要内容,如果未能解决你的问题,请参考以下文章

qt sqlite 需要互斥访问吗

将 sqlite DB 添加到可执行 JAR 文件

是否可以访问可执行 JAR 之外的 SQLite 数据库文件?

使用 Qt 从 SQLite 中选择

qt操作sqlite 如何使用vacuum命令?

无法在发布模式下编译的 ide 之外运行 qt-creator 可执行文件