Как вставить запись в SQL-модель и не перечитывать потом всей таблицы ? |
Здравствуйте, гость ( Вход | Регистрация )
Как вставить запись в SQL-модель и не перечитывать потом всей таблицы ? |
masterlan |
10.3.2010, 22:50
Сообщение
#1
|
Студент Группа: Новичок Сообщений: 13 Регистрация: 1.3.2010 Пользователь №: 1497 Спасибо сказали: 0 раз(а) Репутация: 0 |
Привет коллеги.
Перечитал все доступные мне источник 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. Теперь вот обратно хочу переехать(перевести приложение) на родной С++ (с него когда то ушёл в яву). |
|
|
512es |
20.3.2010, 21:18
Сообщение
#2
|
Участник Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: 0 |
masterlan, QSqlTableModel+QTableView не так уж и плох если сабкласить модель с мануал сабмит.
Эх, была ни была! Вот, держи мою модельку:
Только пока с добавлением элементов не разобрался ещё =) Попозже займусь. Если кто знает, приму в дар подсказку =) |
|
|
Litkevich Yuriy |
20.3.2010, 21:40
Сообщение
#3
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Говорят - реализуй flags(), setData() и будет тебе EDIT-ABLE. ну создай тему типа "SqlQueryModel со вставкой/удалением данных" , т.к. тема узкая обсуждение быстрее пойдёт и конкретнее будет.Только не говорят как сделать (INSERT/DELET)-ABLE. П.С. я не вижу принципиальных проблем, т.к. есть insertRow/deleteRow |
|
|
Текстовая версия | Сейчас: 14.1.2025, 20:33 |