Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как вставить запись в QSqlхххModel без refresh-a ? 
:(
    Опции темы
MasterLAN
Дата 10.3.2010, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 3.7.2007

Репутация: нет
Всего: нет



Привет коллеги.
Перечитал все доступные мне источник Qt-информации, но так пока и не могу понять, как оформить нижеследующий сценарий работы приложения.

Приложение работает с информацией хранящейся на SQL-сервере.

Эпизод работы приложения:

1. ТАБЛИЧНАЯ ФОРМА отображает результат сложного SELECT-а из нескольких таблиц SQL-сервера.
    Изменять ТАБЛИЧНУЮ ФОРМУ прямо с экрана запрещено. (есть кнопки -  "Изменить"    "Добавить" )

2. При их нажатии отрывается специальная ФОРМА  для коррекции/добавления записи. 
    После закрытия этой ФОРМЫ выполняется серия UPDATE/INSERT-выражений  меняющих таблицы на SQL-сервере.

3. Есть на ТАБЛИЧНОЙ ФОРМЕ кнопка "Удалить". 
    Её нажатие влечёт за собой серию DELETE/UPDATE-выражений  также меняющих таблицы на SQL-сервере.

4. После проведённого  изменения/добавления/удаления на SQL-сервере  ТАБЛИЧНАЯ ФОРМА должна отразить новое состояние данных.

ВНИМАНИЕ !          Изменяли/добавляли/удаляли всего ОДНУ логическую запись сложного SELECT-а !

Как перечитав ТОЛЬКО её ОДНУ из базы отобразить её новое состояние в ТАБЛИЧНОЙ ФОРМЕ ? 
Если произошло добавление как добавить ТОЛЬКО новую строку в ТАБЛИЧНУЮ ФОРМУ ?
Ну и естественно при удалении как удалить соответствующую строку из ТАБЛИЧНОЙ ФОРМЫ не перечитывая весь сложный SELECT заново ?

В приложении описанный эпизод повторяется МНОГОкратно , потому хочется его сделать оптимальным.

Связка QSqlTableModel+QTableView не подходит, т.к. порождает неоправданно частые селекты к таблицам.
Да и таб.формы опираются на сложные селекты , а не на таблицы.
О существовании VIEW и STORED PROCEDURE как альтернативы знаю, только куда частые перезапросы денешь?
Сделал submitAll() и  тем самым родил перезапрос. :(

Связка QSqlQueryModel+QTableView объявлена как READ-ONLY.
Говорят - реализуй flags(), setData() и будет тебе EDIT-ABLE.
Только не говорят как сделать (INSERT/DELET)-ABLE.

И что теперь делать ? 
Неужели "руками" из QSqlQuery заполнять QTableWidget и уже в нём ins/edit/del организовывать?

Приложение, о котором пишу, содержит около 70 табличных форм и к ним столько же форм редактирования строк.
Да плюс 100 репортов. 
В базе более 100 таблиц.  Есть среди них со 100 тыс. записей и всё это будет утолщятся.
Представляете себе реакцию приложения на исправление одной опечатки в одном слове одного поля одной табличной формы со 100 тыс записей 
при перезапросах всего селекта !  Правим одну букву, а перечитываем ....
Ну жалко ведь барышень-операторов заполняющих ежедневно базу новыми документами.
А как быть - пока не знаю.

Java-Swing-Postgresql аналог вышеупомянутого приложения уже дорос до верcсии 3.034.  
Теперь вот обратно хочу переехать(перевести приложение) на родной С++ (с него когда то ушёл в яву). 

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0770 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.