数据库在应用程序中通过以下代码进行操作:
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”文件。它也不会将更改的数据保存到文件中。
答案 0 :(得分:2)
问题可能是manual submit policy。
将其切换为自动,或在适当的时间手动调用QDataWidgetMapper::submit()
(从小部件中丢失新值之前)。