データ・ベースは、次のコードによって、アプリケーションにoppenedさ:のQt - 近いアプリケーションで同期SQLiteのデータベースは
db = QSqlDatabase::addDatabase("QSQLITE");
bool dbExists = QFile::exists("base.db");
db.setDatabaseName("base.db"); // ":memory:"
if (!db.open()) {
db.close();
QMessageBox::critical(0, tr("Cannot open database"),
tr("Unable to establish a database connection.\n"
"This example needs SQLite support. Please read "
"the Qt SQL driver documentation for information how "
"to build it."), QMessageBox::Cancel);
return;
}
if (!dbExists)
createDB();
は私がQDataWidgetMapper経由のウィジェットにいくつかのテーブルをマッピングしました。アプリケーションの実行中はすべて正常に動作します。変更が有効になります。しかし、既存のbase.dbでアプリケーションを再起動すると、すべてのchagesが失われます。アプリケーションははるかに高速に起動するため、このファイルを開きますが、データベースは変更されません。
私は運がありません
db.close();
this->close();
することにより、アプリケーションを閉じるようにしようとしました。同期クエリでもdb.openの後には役に立ちませんでした:
QSqlQuery query(db);
query.exec("PRAGMA synchronous = ON;");
私はbase.dbへの変更を同期するのに何が欠けていますか?
UPDATE。sqlwidgetmapperの標準サンプルをビルドして、memory: "base.db"ファイルに変更できます。変更されたデータもファイルに保存されません。
QWidgetDataMapperの設定方法と使用するモデルを追加してください。私はこの問題で野生の推測をしましたが、たとえ私が正しいと推測して問題を解決したとしても、他の人にとっては利益のためにコードを追加してください。 – hyde