我有以下想法:用户可以编辑数据库,当他按下退出数据库时,他会被问到是否要保存编辑过的数据库,或者如果他编辑了一些东西,然后把它转回来,他不会被问到。
我认为我应该比较创建的数据库和编辑后的数据库,当用户按下退出,但不知道如何。
这是我创建数据库的代码model = new QSqlRelationalTableModel(this, *db);
model->setTable("cv");
model->setFilter("cv_id = "+currentCV+"");
model->removeColumns(0,1);
model->select();
ui->tableView->show();
ui->tableView->setModel(model);
你有两个选择
-
创建数据库中的事件触发器。事件触发器在用户更改数据库表结构、创建表或更改列时起作用。因此,当用户执行任何DDL命令时,这些触发器都会起作用。(修改表,添加列,创建索引,删除表等)您可以使用事件触发器将这些命令插入到日志表中。
-
您的数据库结构(所有表,列,索引等)都存储在
information_shema
中。您可以选择这些表的数据并将其保存在某个地方,然后将其与更改过的数据进行比较。
请记住,在提交用户更改之前不会执行对数据库的更改。默认情况下,在发生更改时执行sumbit,这对您没有帮助。但是,你可以设置
model.setEditStrategy(QSqlTableModel.EditStrategy.OnManualSubmit)
此时,只有在调用方法model.submitAll()
时才持久化更改。
此时,您所要做的就是利用模型的dataChanged
信号并使用标志变量来检查是否已操作更改:
data_changed = False
def on_data_changed()
data_changed = True
model.dataChanged.connect(on_data_changed)
现在您可以调整代码的逻辑以满足您的特定目的