данных 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. Все работает нормально во время запуска приложения. Изменения вступают в силу. Но все chages теряются после перезапуска приложения с существующим base.db. Приложение запускается гораздо быстрее, поэтому он открывает этот файл, но с неизменной базой данных.
Я попытался закрыть приложение,
db.close();
this->close();
Там не повезло. Даже синхронизации запроса не помогло после db.open:
QSqlQuery query(db);
query.exec("PRAGMA synchronous = ON;");
Что я пропустил синхронизировать изменения base.db?
ОБНОВЛЕНИЕ. Вы можете попробовать построить sqlwidgetmapper стандартный пример и изменить: memory: to "base.db" file. Он также не сохраняет измененные данные в файл.
Пожалуйста, добавьте код, показывающий, как вы настроили QWidgetDataMapper и модель, которую он использует. Я сделал глупость в этой проблеме, но даже если бы я догадался, и это решает проблему, добавьте код для выгоды, если другие. – hyde