Russian Qt Forum

Qt => Базы данных => Тема начата: Пантер от Октябрь 11, 2007, 11:26



Название: Помощь по model\view
Отправлено: Пантер от Октябрь 11, 2007, 11:26
   Только не отсылайте меня сразу в ассистент, его я читал, но не
помогло. Просто очень трудно понять данную технологию. В общем такая
задача:
1. Есть БД с таблицей, в которой 7 полей.
2. Создаю QSqlQueryModel и соединяюсь SELECT * FROM table
3. Создаю QTableView и подключаю к нему модель.
4. Редактирую данные через дополнительное окно и после добавления опять
делю в модели SELECT * FROM table
Теперь трудности:
1. Как установить курсор на последнюю запись?
2. Как установить курсор на нужную запись (при редактировании)?
3. Нужно ли каждый раз после изменений обновлять всю модель?
4. Как вообще правильно работать с model\view???
   Буду рад любой помощи.


Название: Re: Помощь по model\view
Отправлено: Alexandr Az от Октябрь 11, 2007, 12:52
Цитировать
Теперь трудности:
1. Как установить курсор на последнюю запись?
Модель не знает о вью, следовательно устанавливать на последнюю запись нужно во вью
view.setCurrentIndex(Индекс), где индекс  можно взять с модели. Но смотря что ты имеешь в виду под последней записью.
Ведь модель считывает не все записи сразу, а по мере продвижения по модели (скажем так - пакетами)....
Цитировать
2. Как установить курсор на нужную запись (при редактировании)?
Но вопрос я не понял. Если нужно на нужную запись при редактировании - так юзвер сам поставит....
Вообще смотри view.selectionModel ()
Цитировать
3. Нужно ли каждый раз после изменений обновлять всю модель?
К сожалению да.
Вообще скажи версию QT. В последних он обновляет сам (т.е. обновления для тебя происходят неявно)
 Жди релизы, мож изменят. Что то уже слышал про нотификацию в новом куте......
Или пиши сам свою модель...
Или в модели поставь кеширование данных.... (тогда нужно принудительно сказать об обновлении)

Цитировать
4. Как вообще правильно работать с model\view???
   Буду рад любой помощи.
да там в принципе не правильно работать сложно......
Другими словами модель - вью sql  - это недоработанная до ужаса вещь, пилять щас напильником не вижу смысла, потому как qt
постоянно дополняет её новыми возможностями. Плохо конечно, что мы не знаем конечную цель.............



Название: Re: Помощь по model\view
Отправлено: UVV от Октябрь 11, 2007, 16:06
потому как qt
постоянно дополняет её новыми возможностями. Плохо конечно, что мы не знаем конечную цель.............
Вы имеете ввиду, что программирование на qt вещь далеко не идеальная?


Название: Re: Помощь по model\view
Отправлено: Alexandr Az от Октябрь 11, 2007, 16:28
Цитировать

Вы имеете ввиду, что программирование на qt вещь далеко не идеальная?

Я имею в виду, что мы не знаем планов QT относительно развития модуля SQL. Единственное что я слышал про планы - это типа крутая поддержка многопоточности.  Те, кто серьёзно хочет девелопить на SQL прийдётся свои модели писать, а может даже и дрова. Если бы знать, скажем, что во II квартале они сделают нормальную модель, с тем то тем то, было бы легче...

Возьмите КДЕ... Начали они его писАть на бете 4-й... И что. Последняя версия содержит столько дополнений, что многое из того,  что кдешники сами накалякали можно выбросить (я конечно с ними не знаком, но мне кажется дела обстоят именно так). А все из за того, что не говорят, что будет в будущем....


Название: Re: Помощь по model\view
Отправлено: ритт от Октябрь 11, 2007, 17:10
частично согласен с Александром (Аз)
частично, потому как часть того, что накалякали кдешники, попозжа входит в состав родного функционала кутэ
получается крговорит кода в природе: тролли написали; кде доработали, написали костыли и новый функционал; тролли посмотрели - красиво, хорошо, удобно - вынесли данные наработки в кутэ; и т.д.
так уже было не раз и так ещё будет...

то, что у снапшотов нет ченджлога и туду на грядущую мажорную версию, усложняет нам жизнь. частенько приходится писать что-нибудь своё, чтобы с выходом мажорной версии удалить этот код к богам...

тем не менее, работать с троллями (кутэ) гораздо удобнее, чем, например, с дотнетом - тролли, по-крайней мере, прислушиваются к девелоперам и реально правят баги и добавляют функционал из трекера


Название: Re: Помощь по model\view
Отправлено: dilshodm от Октябрь 11, 2007, 17:50
Теперь трудности:
1. Как установить курсор на последнюю запись?
2. Как установить курсор на нужную запись (при редактировании)?
3. Нужно ли каждый раз после изменений обновлять всю модель?
4. Как вообще правильно работать с model\view???
   Буду рад любой помощи.


1. Чтобы найти последнюю введенную запись я применял след. метод (конечно через ж.., но другого метода не нашел):
Код:
после (SELECT) или submitAll() делаю
QSqlQuery q = model->query();
int id = q.lastInsertId().toInt();

А дальше этот id ищу в таблице (id - это ключ) и нужную строку выделяю через view->selectRow(...)

Вообще QSqlQueryModel скорее предназначена для чтения (показа) результатов, а для редактирования удобнее будет работать с QSqlTableModel.
Там можно задавать кешировать или нет результаты. А сохранять через model->submitAll().
После submitAll() происходит сброс текущего курсора, поэтому приходится отыскивать id как я указывал выше и делать selectRow().


Название: Re: Помощь по model\view
Отправлено: Пантер от Октябрь 11, 2007, 18:10
Спасибо всем за ответы.
Как вы могли заметить в моих вопросах, модель я использую только для показа, т.к. редактирование/добавление провожу через другие окна.
dilshodm, с нахождением id последней записи проблем нет, проблема в другом - я не знаю как найти во вьюхе/модели строку, которая мне нужна (по заданному id).
Кутя у меня 4.3.2. С птицей тоже есть оповещение об изменениях, или только с SQLite?


Название: Re: Помощь по model\view
Отправлено: dilshodm от Октябрь 11, 2007, 18:44
Честно говоря не понял о каких оповещениях идет речь.
Если о lastInsertId, то надо проверить QSqlDriver::hasFeature(QSqlDriver::LastInsertId) на птице.

Насчет поиска.
Сам не пробовал, но думаю следующее должно сработать
Код:
int row = model->match(model->index(0, idColumn), Qt::DisplayRole, id).at(0).row();

Затем номер этой строки можно указывать в selectRow()


Название: Re: Помощь по model\view
Отправлено: Пантер от Октябрь 11, 2007, 19:00
Спасибо. Завтра буду пробовать.


Название: Re: Помощь по model\view
Отправлено: ритт от Октябрь 11, 2007, 19:12
LastInsertId тру у всех драйверов, кроме одбц


Название: Re: Помощь по model\view
Отправлено: orefkov от Октябрь 12, 2007, 07:53
Другими словами модель - вью sql  - это недоработанная до ужаса вещь, пилять щас напильником не вижу смысла, потому как qt
постоянно дополняет её новыми возможностями. Плохо конечно, что мы не знаем конечную цель.............
Вот как это точно. Вещь, совершенно не приспособленная для реальной работы.
Да и вообще в дизайне модель-вью у кутэ не без кривизны.


Название: Re: Помощь по model\view
Отправлено: ритт от Октябрь 12, 2007, 08:13
Вот как это точно. Вещь, совершенно не приспособленная для реальной работы.
Да и вообще в дизайне модель-вью у кутэ не без кривизны.

именно! для реальной работы никакая!
а мы тут просто поделки собираем и плюшками балуемся :(
если что-то приходится дорабатывать (или мириться с недоработками), это ещё не означает, что вещь - говно!


Название: Re: Помощь по model\view
Отправлено: orefkov от Октябрь 12, 2007, 08:22
а мы тут просто поделки собираем и плюшками балуемся :(
если что-то приходится дорабатывать (или мириться с недоработками), это ещё не означает, что вещь - говно!
Ну, ну, спокойнее.
Какашками в QT бросатся отнюдь не собираюсь, мне она очень даже нравится.
Просто хочу сказать, что да, действительно, кое-что надо дорабатывать напильником.
И естественно, кое-что делать совсем самому.


Название: Re: Помощь по model\view
Отправлено: ритт от Октябрь 12, 2007, 08:56
а где - нет?


Название: Re: Помощь по model\view
Отправлено: orefkov от Октябрь 12, 2007, 09:07
Да нигде. В 1Се наверное только :)


Название: Re: Помощь по model\view
Отправлено: Вячеслав от Октябрь 12, 2007, 16:36
Да нигде. В 1Се наверное только :)
Ага-щаз ;) То-то для 7.х написана туева хуча com-extention'ов - разве это не напильник ?
Для 8 тож есть не мало ....
А по делу - по специфике используемых БД (птиц 2.1 и линтер) мне родной sql модуль вообще не подошел :( Пришлось брать в руки кувалду и писать ОРМ для указаных БД и своих моделей ;) Два месяца сексу и на _текущий_ момент  полное удовольствие от работы ;)