Название: Не работает QDataWidgetMapper::submit Отправлено: hank от Март 18, 2011, 10:37 Имею QSqlTableModel и QDataWidgetMapper:
Код
Далее по нажатию на соответствующую кнопку у меня должны сохраняться в модели и БД изменения, внесённые в line_Edit'ы: Код
Запускаю приложение, вношу изменения в line_Edit'ы, жму кнопку Save - всё работает, mapper.submit() возвращает true. После этого еще меняю какое-либо поле, снова жму Save - изменения не вносятся, mapper.submit() возвращает false. Как мне найти причину такого поведения? Аналога lastError я для маппера не нашёл. Название: Re: Не работает QDataWidgetMapper::submit Отправлено: hank от Март 18, 2011, 11:24 Дополнительно обнаружил, что по второму нажатию кнопки Save (т.е. вызов mapper.submit()) mapper.currentIndex() устанавливается на значение -1.
Почему так происходит - не пойму. Название: Re: Не работает QDataWidgetMapper::submit Отправлено: asvil от Март 18, 2011, 11:28 Вообще SqlTableModel делает emit reset() после submit, и соответственно DataWidgetMapper позиционируется на невалидную либо первую строку. Такое поведение должно быть после первого submit'а.
Название: Re: Не работает QDataWidgetMapper::submit Отправлено: hank от Март 18, 2011, 11:38 Собственно я эту программу пишу по аналогии с уже существующей. Грубо говоря, я лишь указал другую таблицу в БД и у mapper'а переназвал поля. Поэтому и возникает вопрос, почему почти идентичный код в одном случае работает, а в другом - нет.
То есть мне теперь надо после каждого mapper.submit() делать mapper.setCurrentIndex() в правильное место? Название: Re: Не работает QDataWidgetMapper::submit Отправлено: asvil от Март 18, 2011, 11:48 Идентичный код может зависеть от primary key на таблице, а точнее от его отсутсвия/присутсвия.
Название: Re: Не работает QDataWidgetMapper::submit Отправлено: hank от Март 18, 2011, 12:03 primary key автоматически заносится в таблицу до включения mapper'а.
Таблицы в обеих программах аналогичные. Название: Re: Не работает QDataWidgetMapper::submit Отправлено: hank от Март 18, 2011, 12:14 Прошу прощения, был мой косяк.
Оказалось, забыл залить в базу для нужной таблицы внешний ключ. |