Russian Qt Forum

Qt => Базы данных => Тема начата: Alex_C от Июль 10, 2012, 10:21



Название: Поясните по QSqlTableModel
Отправлено: Alex_C от Июль 10, 2012, 10:21
Перечитал все что нашел книги по Qt, но по работе конкретно QSqlTableModel не все понятно.
Создал свою модель на основе QSqlTableModel. переопределил метод setData. В QTableView модель показывается, редактируется и сохраняется в базу. setData работает правильно.
А вот если я пытаюсь редактировать модель так:
Код
C++ (Qt)
   QSqlRecord record = model.record(0);
   record.setValue("title", "ZZZzzzzzZz");
   record.setValue("year", record.value("year").toInt() + 1);
   model.setRecord(0, record);
   model.submitAll();
 

или так

Код
C++ (Qt)
   model.removeRows(0, 1);
   model.submitAll();
 

Данные в QTableView меняются, но в базу изменения не заносятся.
setEditStrategy(QSqlTableModel::OnManualSubmit); - у меня прописано.


Название: Re: Поясните по QSqlTableModel
Отправлено: dio от Июль 11, 2012, 16:42
Для начала, посмотрите результат выполнения метода model.submitAll(). При не удачном выполнении кэш не чистится.
Цитировать
Note: In OnManualSubmit mode, already submitted changes won't be cleared from the cache when submitAll() fails. This allows transactions to be rolled back and resubmitted again without losing data.

Если submitAll() проходит нормально, то проверяйте метод  setData. Посмотрите в исходниках как он реализован в QSqlTableModel.