Название: QTableView+model ошибки UPDATE Отправлено: PavelS от Февраль 17, 2017, 12:08 Редактируются данные через связку QTableView+model. На модель поставлена setEditStrategy(OnFieldChange), т.е. сбрасываю данные с GUI в DB почаще. База (PostgreSQL), в ней насверлено много view, соответственно триггеры. Как правило всё работает. Иногда триггеры оказываются не совсем правильно написанными и падают при update, т.е. при редактировании, т.е. SQL-запрос с update даёт ошибку при исполнении.
Суть проблемы: в пользовательском интерфейсе совершенно нет сообщений о возникающих ошибках, кажется что всё ОК, когда не ОК. Приходится закрывать приложение, потом открывать заново и смотреть, сохранилось ли хоть что-то, что маразм. Хочу ловить и сигналить, что редактирование завершилось ошибкой. Как это сделать? Qt5.3 (последняя сертифицированная мин.обороны) В инет видел точно те же вопросы, без ответов (https://bugreports.qt.io/browse/QTBUG-45468)... Название: Re: QTableView+model ошибки UPDATE Отправлено: panAlexey от Февраль 17, 2017, 13:21 Возможно лучше будет генерировать формы и ими уже рулить?
Название: Re: QTableView+model ошибки UPDATE Отправлено: vic57 от Февраль 17, 2017, 16:29 если QSqlTableModel, то она наследуется от QSqlQueryModel, там есть lastError(). знатоки советуют QSqlQueryModel с переопределенной TableView для редактирования
чтобы увидеть изменения можно задать фильтр типа Код: model->setFilter("id is not null"); Название: Re: QTableView+model ошибки UPDATE Отправлено: PavelS от Февраль 17, 2017, 16:57 Вик, благодарю за ответ, однако
1) чтобы вызывать LastError нужно событие, а я его не знаю, никто не подскажет? Когда в таблице заканчивается редактирование, прошел update и LastError даст актуальную инфомацию? 2) ID проблем не вызывает, проблемы с update обычных полей. Если триггер сломался, или же просто забыть его проинсталлить, то тогда таблица отображается ОК, но после редактирования ничего не сохраняется. Пан Алексей, я не понял ответа про формы и рулить. Нельзя ли поподробней? Формы есть, а что рулить? Название: Re: QTableView+model ошибки UPDATE Отправлено: vic57 от Февраль 17, 2017, 17:47 для записи изменений вызывается submit(), submitAll(). по докам они возвращают true/false
имхо SqlQueryModel более прозрачна у Земскова Ю. есть книги по Qt, там прям пример есть такой ЗЫ нашел в архиве Название: Re: QTableView+model ошибки UPDATE Отправлено: vic57 от Февраль 17, 2017, 19:51 или проще можно
model.h Код: class Model : public QSqlTableModel { Код: Model::Model(QObject *parent,QSqlDatabase) : QSqlTableModel(parent) {} Название: Re: QTableView+model ошибки UPDATE Отправлено: panAlexey от Февраль 20, 2017, 10:11 Пан Алексей, я не понял ответа про формы и рулить. Нельзя ли поподробней? Формы есть, а что рулить? Пусть не модель сабминтит, а созданная тобой форма, и запрос писать руками и обрабатывать коды возврата.Только это геморойно и что-бы гемороя избежать нужны метаданные и генератор форм. Однако vic57 предложил более удобную реализацию. Название: Re: QTableView+model ошибки UPDATE Отправлено: vic57 от Февраль 20, 2017, 16:22 для удобства можно еще сигнал прикрутить :)
Код
Код
Название: Re: QTableView+model ошибки UPDATE Отправлено: PavelS от Февраль 21, 2017, 16:11 Принято. Перегрузить submit, submitAll в модели и так ловить ошибки. Попробую так.
|