QSqlDatabase を使用して Qt 内で SQLite を使用しているアプリケーションがあり、デバッグ モードでコンパイルするとすべて正常に動作します。私の問題は、リリースモードに切り替えても何も機能しないことです。私の最初のエラーは、QtCore4.dll および QtGui4.dll ファイルを取り込むコードに関連しているようでした。これらのファイルをコンパイル済みコードと同じディレクトリに移動すると、プログラムがロードされましたが、次のエラーが Qt Creator コンソールに書き込まれました。
QSqlDatabase: QSQLITE ドライバーがロードされていません
QSqlDatabase: 利用可能なドライバー:
QSqlDatabase: ドライバー プラグインをロードするには、QCoreApplication のインスタンスが必要です。
これが元になっていると思われる唯一の行は、グローバルにするために一番上にある次の行です。
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
私のPROファイルは次のとおりです。
QT += core gui sql
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = LessonsLearned
TEMPLATE = app
SOURCES += main.cpp\
lessonslearned.cpp
HEADERS += lessonslearned.h
FORMS += lessonslearned.ui
問題が解決するかどうかを確認するために、Qt を再インストールしてみました。
繰り返しますが、デバッグをコンパイルすると、すべてが正常に機能します。問題が発生したのはリリースです。
問題を引き起こす可能性のある何らかの理由がある場合に備えて、Qt 4.7.3 と Visual Studio 2008 を使用しています。
アップデート
「QSqlDatabase db」の宣言をクラスのヘッダー ファイル内に移動し、それを非公開にしました。また、addDatabase("QSQLITE") の呼び出しをコンストラクターに移動しました。
LessonsLearned::LessonsLearned(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::LessonsLearned)
{
ui->setupUi(this);
db = QSqlDatabase::addDatabase("QSQLITE");
}
これにより、QCoreApplication が必要であるというエラーが消えましたが、それでも最初の 2 つのメッセージが表示されます。デバッグでは引き続き機能しますが、リリースでは機能しません。プログラムがまだどこかで間違った DLL を指しているのではないかと思っています。依存関係ウォーカーをもう少し試してみましたが、まだ間違っているものを見つけることができませんでした.
更新 2 ここで役立つものを見つけました: QSQLITE driver not loaded - where to put qt database driver plugins。これは私が抱えていたのと同じ問題だと思います。Release ディレクトリを変更して sqldrivers フォルダーを追加する必要があった理由はまだわかりませんが、機能します。