Russian Qt Forum

Qt => Базы данных => Тема начата: ByKA от Февраль 24, 2009, 17:03



Название: SQLite + QSqlTableModel + submitAll непонятки...
Отправлено: ByKA от Февраль 24, 2009, 17:03
Добрый день,

Есть QSqlTableModel с политикой OnManualSubmit на которую подвешена SQLite база.

Изменяем данные:
Код:
QSqlRecord record = SignalModel->record(ssIndex.row());
record.setValue("Gen", "2");
SignalModel->setRecord(ssIndex.row(), record);
После этого в во вьюшке (QTableView) эти изменения появляются.

submitAll вынесен на кнопку
Код:
if (!SignalModel->submitAll())
{
QMessageBox::warning(this, tr("Submit"),
tr("The database reported an error: %1")
.arg(SignalModel->lastError().text()));
}

В Qt 4.4.3 и 4.4.4 submitAll ругается что нет измененных данных (No fields to update).
В Qt 4.3.5 и 4.5.0 вызов проходит нормально, но изменения во вьюшке сбрасываются и БД не попадают (((

В багтрекере нашел ошибку по поводу "No fields to update" : http://www.qtsoftware.com/developer/task-tracker/index_html?method=entry&id=230381 (http://www.qtsoftware.com/developer/task-tracker/index_html?method=entry&id=230381)
Больше мыслей нет (((


Название: Re: SQLite + QSqlTableModel + submitAll непонятки...
Отправлено: ByKA от Февраль 25, 2009, 11:03
Добавлю: с setData такая-же ерунда. После submitAll данные сбрасываются и в базу не попадают... Версия 4.5.0.


Название: Re: SQLite + QSqlTableModel + submitAll непонятки...
Отправлено: ByKA от Февраль 25, 2009, 12:25
И еще добавлю: при изменении политики на QSqlTableModel::OnFieldChange или RowChange данные сбрасываются сразу после окончания ввода (при редактировании данных из формы).


Название: Re: SQLite + QSqlTableModel + submitAll непонятки...
Отправлено: ranet от Март 10, 2009, 16:55
Проверь пожалуйста, нет ли у тебя где-нибудь похожей строчки:
SignalModel->removeColumn(0);
Если есть - то попробуй убрать.


Название: Re: SQLite + QSqlTableModel + submitAll непонятки...
Отправлено: ByKA от Март 12, 2009, 11:38
removeColumn не использую ((( Вариантов пока не нашел.....


Название: Re: SQLite + QSqlTableModel + submitAll непонятки...
Отправлено: ranet от Март 12, 2009, 12:16
removeColumn не использую ((( Вариантов пока не нашел.....
а mapper'а таким образом настроенного:
mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit)
у тебя тоже нету?
Посмотрел твой код внимательно:
record.setValue("Gen", "2");
SignalModel->setRecord(ssIndex.row(), record);
-это место подозрения некоторые вызывает, а именно - ты меняешь данные, и после этого выбираешь СНОВА строку (не так важно, что строка - та же самая, которая и была). Возможно что тут как раз изменения и теряются.. Попробуй для эксперимента submit МЕЖДУ этими командами вызвать..