Russian Qt Forum

Qt => Model-View (MV) => Тема начата: panAlexey от Октябрь 25, 2011, 20:59



Название: QSqlQueryModel + QTableView + insert into | UPDATe обновление данных.
Отправлено: panAlexey от Октябрь 25, 2011, 20:59
Если пишу в табличку (insert into | UPDATe), которая используется через QSqlQueryModel присобаченый к QTableView
мне надо этой модели сделать рефрешь?
или можно как-то иначе сделать?
или там таймеры есть, которые через некоторое время подхватят изменения?
может их задать (таймеры)?


Название: Re: QSqlQueryModel + QTableView + insert into | UPDATe обновление данных.
Отправлено: Пантер от Октябрь 25, 2011, 21:32
Нужно делать рефрешь вручную.


Название: Re: QSqlQueryModel + QTableView + insert into | UPDATe обновление данных.
Отправлено: panAlexey от Октябрь 25, 2011, 23:49
Нужно делать рефрешь вручную.
понял, не проблема.
у меня в 1С и таймеры с заданием времени и вручную можно обновить.
думаю всетаки и таймер прикрутить для варианта работы по сети.
ПС. в 1С вьюву можно скомандовать
гИсточникДанных.Обновить (http://www.1cpp.ru/docum/icpp/html/TableField.html#refresh)(ТекСтрока);  
и вьюв спозиционируется на объекте в ТекСтрока.
если возможность делать такое с QSqlQueryModel?


Название: Re: QSqlQueryModel + QTableView + insert into | UPDATe обновление данных.
Отправлено: maint от Октябрь 26, 2011, 04:52
нельзя. Только целиком. Как и в 1С, внутри. Если не прекратить думать категориями 1с-быдлокодера , в программировании делать нечего.


Название: Re: QSqlQueryModel + QTableView + insert into | UPDATe обновление данных.
Отправлено: Пантер от Октябрь 26, 2011, 08:32
panAlexey, есть нотификаторы, но не во всех БД. Я их с постгресом юзал - удобная штука.


Название: Re: QSqlQueryModel + QTableView + insert into | UPDATe обновление данных.
Отправлено: panAlexey от Октябрь 26, 2011, 11:28
нельзя. Только целиком. Как и в 1С, внутри. Если не прекратить думать категориями 1с-быдлокодера , в программировании делать нечего.
Не надо дутого высокомерия.
Та концепция позиционирования весьма удобна, пара запросов с лимитами "вверх" и "вниз" относительно ключевого элемента сортировкой и уже понятно сколько данных надо отдать вьюву для отображения в нужной позиции и установки курсора.
Только нужно плотное взаимодействие вьюва и запросов.
Это очень часто применяется на практике. Если этой возможности нет, мне прийдется её манипулировать.


Название: Re: QSqlQueryModel + QTableView + insert into | UPDATe обновление данных.
Отправлено: panAlexey от Октябрь 26, 2011, 11:53
panAlexey, есть нотификаторы, но не во всех БД. Я их с постгресом юзал - удобная штука.
Я не про то спрашивал.
У меня вьювы и формы элементов строются из единой фабрики, так что скомандовать "обновись" при записи элемента для меня не проблема.
Проблема в следующем.
Если записывается новый элемент, то я хочу, чтобы в том QTableView из которого пошло создание этот элемент стал текущим.
Найти и проинформировать этот вьюв не проблема, нотификатор не требуется.
Проблема в позиционировании. У этого вьюва есть запрос.
Соответственно надо сделать рефрешь модели, что-бы новый элемент подхватился запросом.
Потом думаю перебрать запрос модели, в запросе в определенном поле сидит ключ этого элемента.
Надо найти порядковую запись строки запроса в котором сидит этот ключ, и построить QModelIndex по этим данным, а вьюву дать команду на позиционирование на этом индексе.
Вот такой миниплан. Получится? Или будут палки в колеса?


Название: Re: QSqlQueryModel + QTableView + insert into | UPDATe обновление данных.
Отправлено: Пантер от Октябрь 26, 2011, 11:59
Я в свое время тупо сохранял ID, рефрешал и делал перебор, пока не найду нужную запись.


Название: Re: QSqlQueryModel + QTableView + insert into | UPDATe обновление данных.
Отправлено: panAlexey от Октябрь 26, 2011, 12:04
Я в свое время тупо сохранял ID, рефрешал и делал перебор, пока не найду нужную запись.
Ты имеешь ввиду что ID - это ключ который однозначно характеризует документ/элемент в таблице?
А перебор чего? запроса или индексов модели?


Название: Re: QSqlQueryModel + QTableView + insert into | UPDATe обновление данных.
Отправлено: Пантер от Октябрь 26, 2011, 12:14
Ты имеешь ввиду что ID - это ключ который однозначно характеризует документ/элемент в таблице?
Да.
А перебор чего? запроса или индексов модели?
Индексов модели.


Название: Re: QSqlQueryModel + QTableView + insert into | UPDATe обновление данных.
Отправлено: panAlexey от Октябрь 26, 2011, 12:51
Ты имеешь ввиду что ID - это ключ который однозначно характеризует документ/элемент в таблице?
Да.
А перебор чего? запроса или индексов модели?
Индексов модели.
Можно пример перебора индексов?
ПС. Но это на вечер. ))
Сейчас быдлокодинг на 1С ))))


Название: Re: QSqlQueryModel + QTableView + insert into | UPDATe обновление данных.
Отправлено: Странник от Октябрь 26, 2011, 13:08
Можно пример перебора индексов?
ПС. Но это на вечер. ))
Сейчас быдлокодинг на 1С ))))
у меня поиск строки по значению data в столбце column реализован так:
Код:
QModelIndexList matchIndexes = model->match(model->index(0, column), Qt::DisplayRole, data, 1, Qt::MatchExactly);

if (!matchIndexes.isEmpty()) return matchIndexes.at(0).row();
else return -1;
но корректно работать будет только если не canFetchMore = ) свой поиск с fetch'ами все руки не доходят написать.


Название: Re: QSqlQueryModel + QTableView + insert into | UPDATe обновление данных.
Отправлено: panAlexey от Октябрь 26, 2011, 13:15
Можно пример перебора индексов?
ПС. Но это на вечер. ))
Сейчас быдлокодинг на 1С ))))
у меня поиск строки по значению data в столбце column реализован так:
Код:
QModelIndexList matchIndexes = model->match(model->index(0, column), Qt::DisplayRole, data, 1, Qt::MatchExactly);

if (!matchIndexes.isEmpty()) return matchIndexes.at(0).row();
else return -1;
но корректно работать будет только если не canFetchMore = ) свой поиск с fetch'ами все руки не доходят написать.
Сенк. Я потихонечку только начинаю вникать в Qt-ю специфику модель-вид+SQL.
Плохо, что слабовато с инглишем для ассистанта.
Не особо плохо, но зачастую нехватет ))


Название: Re: QSqlQueryModel + QTableView + insert into | UPDATe обновление данных.
Отправлено: panAlexey от Октябрь 29, 2011, 20:37
Можно пример перебора индексов?
ПС. Но это на вечер. ))
Сейчас быдлокодинг на 1С ))))
у меня поиск строки по значению data в столбце column реализован так:
Код:
QModelIndexList matchIndexes = model->match(model->index(0, column), Qt::DisplayRole, data, 1, Qt::MatchExactly);

if (!matchIndexes.isEmpty()) return matchIndexes.at(0).row();
else return -1;
но корректно работать будет только если не canFetchMore = ) свой поиск с fetch'ами все руки не доходят написать.

таким поиском какая-то фигня получается...
в самой функции match смотрет сравнивается 2 QVariant со значениями v 1 (qlonglong) и value 10 (int) и конструкция
if (v==value) дает true O_o.......