Russian Qt Forum

Qt => Базы данных => Тема начата: stealth от Ноябрь 18, 2007, 18:46



Название: Обновление одной конкретной строчки в модели
Отправлено: stealth от Ноябрь 18, 2007, 18:46
Здравствуйте!
Есть QSqlRelationTableModel, есть QTableView.
После некоторых событий в БД происходят изменения (модель при этом вообще не трогается), причем я знаю по какому QModelIndex произошли изменения. Метода, чтобы обновить только конкретную строчку не нашел, пока приходится делать model->select()
Как же всё-таки сделать обновление одной только строчки?


Название: Re: Обновление одной конкретной строчки в модели
Отправлено: ритт от Ноябрь 18, 2007, 22:06
поскольку из текста выше не очень понятно, попробую угадать...
берёшь у модели индекс, работаешь с данными этого индекса, изменяешь их и запросом отправляешь изменения в бд...и теперь надо обновить данные этого индекса в модели, не дёргая селект....угадал/нет?

если угадал, то поставь у модели эдитстратеги в мануалсабмит и делай сетДата с этим индексом...или сетРекорд для всей строки, предварительно выбрав рекорд этой же строки


Название: Re: Обновление одной конкретной строчки в модели
Отправлено: burunduk от Ноябрь 19, 2007, 00:37
не оно ?
void QAbstractItemView::update ( const QModelIndex & index )

P.S. This function was introduced in Qt 4.3.


Название: Re: Обновление одной конкретной строчки в модели
Отправлено: ритт от Ноябрь 19, 2007, 00:47
не так...

void QAbstractItemView::update ( const QModelIndex & index )   [slot]
Updates the area occupied by the given index.
This function was introduced in Qt 4.3.

обновляет пространство, занимаемое индексом во вьюхе


Название: Re: Обновление одной конкретной строчки в модели
Отправлено: stealth от Ноябрь 19, 2007, 20:20
Этот update не подходит...

Из модели я получаю индекс, получаю значениt primaryKey, после чего сторонним классом обрабатываю данные в базе с этим примариКеем. Данные в базе соответсвенно в базе изменились, а вот в модели остаются старые, пока не обновлю её select`ом, а надо бы обновить только одну строчку.


Название: Re: Обновление одной конкретной строчки в модели
Отправлено: ритт от Ноябрь 19, 2007, 21:07
ммм...http://prog.org.ru/forum/index.php/topic,6502.msg30444.html#msg30444 (http://prog.org.ru/forum/index.php/topic,6502.msg30444.html#msg30444) читал?
должно помочь...


Название: Re: Обновление одной конкретной строчки в модели
Отправлено: stealth от Ноябрь 20, 2007, 18:11
читал несколько раз :)
не сразу осознал, что это и есть решение, но всё-таки понял, что оно мне подойдет, спасибо :)


Название: Re: Обновление одной конкретной строчки в модели
Отправлено: stealth от Ноябрь 20, 2007, 19:31
Опять же неясности, а как получить нужный мне QSqlRecord???
Вот код из ассистента
Код:
 QSqlQuery q("select * from employees");
 QSqlRecord rec = q.record();
Получается мне нужно сформировать запрос базе, но т.к. модель моя QSqlRelationTable, какой там она запрос делает мне не выцепить (вроде как должно было помочь selectStatement(), но оно [virtual protected]).