Сохранение данных в базе данных после изменения данных tableView
Я показываю данные из базы данных Sqlite в QStandardItemModel в tableView, чтобы пользователь мог их редактировать. Я хочу сохранить эти изменения обратно в мою базу данных сейчас, как только пользователь нажимает "сохранить" или пытается выйти с несохраненными изменениями (чтобы дать Промт, в таком случае).
Что может быть лучшим способом сделать это? Я думал о запуске запросов обновления. Но есть ли способ, чтобы я выполнял запросы только на тех строках, которые были изменены пользователем?
2 ответов:
Вы можете использовать
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();
Следует использовать встроенный класс
QSqlTableModel. Он предоставляет редактируемую модель данных и может автоматически сохранять изменения.
Comments