Как вставить запись в 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. Теперь вот обратно хочу переехать(перевести приложение) на родной С++ (с него когда то ушёл в яву). |
|
|
Текстовая версия | Сейчас: 14.1.2025, 20:35 |