【发布时间】:2016-09-21 19:15:15
【问题描述】:
通过以下代码在应用程序中打开数据库:
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 重新启动应用程序后,所有更改都会丢失。应用程序启动速度更快,因此它会打开此文件但数据库未更改。
我已尝试关闭应用程序
db.close();
this->close();
没有运气。在 db.open 之后,即使是同步查询也没有帮助:
QSqlQuery query(db);
query.exec("PRAGMA synchronous = ON;");
在将更改同步到 base.db 时我错过了什么?
更新。您可以尝试构建 sqlwidgetmapper 标准示例并将 :memory: 更改为“base.db”文件。它也不会将更改的数据保存到文件中。
【问题讨论】:
-
请添加显示您如何设置 QWidgetDataMapper 及其使用的模型的代码。我对这个问题做了一个疯狂的猜测,但即使我猜对了并且解决了问题,如果其他人也请添加代码以获取利益。