Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 更改tableView数据后将数据保存到数据库中_C++_Database_Qt_Qtableview - Fatal编程技术网

C++ 更改tableView数据后将数据保存到数据库中

C++ 更改tableView数据后将数据保存到数据库中,c++,database,qt,qtableview,C++,Database,Qt,Qtableview,我在tableView中的QStandardItemModel中显示来自Sqlite数据库的数据,以便用户可以对其进行编辑。我想现在就将这些更改保存回我的数据库,一旦用户按下“保存”键或试图退出未保存的更改(在这种情况下,发出提示) 最好的方法是什么?我正在考虑运行更新查询。但是有没有一种方法可以让我只在那些已经被用户修改过的行上运行查询呢 您应该使用内置的QSqlTableModel类。它提供了一个可编辑的数据模型,可以自动保存更改。您可以使用QSqlTableModel在QTableView

我在tableView中的
QStandardItemModel
中显示来自Sqlite数据库的数据,以便用户可以对其进行编辑。我想现在就将这些更改保存回我的数据库,一旦用户按下“保存”键或试图退出未保存的更改(在这种情况下,发出提示)


最好的方法是什么?我正在考虑运行更新查询。但是有没有一种方法可以让我只在那些已经被用户修改过的行上运行查询呢

您应该使用内置的
QSqlTableModel
类。它提供了一个可编辑的数据模型,可以自动保存更改。

您可以使用
QSqlTableModel
QTableView
中显示表格内容:

QSqlTableModel * model = new QSqlTableModel(this,db);
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->setTable( "someTable" );
model->select();

ui->tableView->setModel( model );
要保存或取消更改,可以开始传输,并在最后提交或回滚。启动事务类似于:

model->database().transaction();
保存按钮的代码:

if(model->submitAll())
    model->database().commit();
else
    model->database().rollback();
取消按钮的代码:

model->revertAll();
model->database().rollback();

即使在my TableView显示join语句的结果时也可以使用此选项吗?在这种情况下,您应该使用
QSqlRelationalTableModel
作为内容。这种情况与答案相似。@Nejat和jm:非常感谢,我在项目中遇到了这一点,花了好几天才发现我忘记了model->database().transaction();和model->database().commit()。你的帖子真的帮了我的忙