Russian Qt Forum
Ноябрь 01, 2024, 12:40 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Обновить ComboBox  (Прочитано 7582 раз)
cya-st
Гость
« : Февраль 19, 2010, 21:57 »

Всем привет...
Есть ComboBox, который привязан к полю таблицы БД. Выводится все нормально, но когда я вношу изменения в таблицу, то мне необходимо обновить отображение в ComboBox. Вопрос: как это сделать?
Записан
alexman
Гость
« Ответ #1 : Февраль 22, 2010, 13:14 »

Например, по таймеру проверять поле БД и если изменилось содержимое, то менять combo box.
Записан
crossly
Гость
« Ответ #2 : Февраль 22, 2010, 19:30 »

зачем таймер.... если все на одной форме....то обновлять содержимое после удачного submit()
Записан
SABROG
Гость
« Ответ #3 : Февраль 22, 2010, 23:28 »

Нужно переопределять QComboBox::showPopup(), обновлять в нем модель и вызывать оригинальный/базовый showPopup().
В зависимости от скорости обработки SQL запроса и других факторов все это дело может подтормаживать. Поэтому логично будет добавить на тулбар кнопку типа "обновить форму" и обновлять модель уже в ней.
Записан
cya-st
Гость
« Ответ #4 : Февраль 23, 2010, 00:00 »

Спасибо всем. Попробую переопределить showPopup.
Записан
crossly
Гость
« Ответ #5 : Февраль 23, 2010, 12:51 »

Нужно переопределять QComboBox::showPopup(), обновлять в нем модель и вызывать оригинальный/базовый showPopup().
В зависимости от скорости обработки SQL запроса и других факторов все это дело может подтормаживать. Поэтому логично будет добавить на тулбар кнопку типа "обновить форму" и обновлять модель уже в ней.
думаю это излишне.... ведь в таком случае обновление будет при каждом показе списка.... при этом обновления в базе может и не быть...
Записан
SABROG
Гость
« Ответ #6 : Февраль 23, 2010, 13:56 »

Нужно переопределять QComboBox::showPopup(), обновлять в нем модель и вызывать оригинальный/базовый showPopup().
В зависимости от скорости обработки SQL запроса и других факторов все это дело может подтормаживать. Поэтому логично будет добавить на тулбар кнопку типа "обновить форму" и обновлять модель уже в ней.
думаю это излишне.... ведь в таком случае обновление будет при каждом показе списка.... при этом обновления в базе может и не быть...

Я предложил 2 варианта и посоветовал использовать второй. Человек не захотел, это его выбор. В любом случае пока запрос к базе не сделаешь никогда не узнаешь обновилось в ней что-то или нет. Нормальный Notification поддерживает только PostgreSQL, но модель все равно этим не пользуется.
Записан
cya-st
Гость
« Ответ #7 : Февраль 23, 2010, 16:24 »

Цитировать
Я предложил 2 варианта и посоветовал использовать второй. Человек не захотел, это его выбор. В любом случае пока запрос к базе не сделаешь никогда не узнаешь обновилось в ней что-то или нет. Нормальный Notification поддерживает только PostgreSQL, но модель все равно этим не пользуется.

Пришлось взять первый вариант. Так как это клиентская программа и клиентов может быть запущено определенное количество ив каждом клиенте могут добавлятся данные. Еще рассматривался вариант с таймером, но на мой взгляд переопределение QComboBox::showPopup() лучше.
Записан
SABROG
Гость
« Ответ #8 : Февраль 23, 2010, 17:21 »

На работе я использую программу написанную на Дельфи, её стоимость около 60 тыс.руб. за лицензию. Многопользовательские лицензии конечно дешевле. Самому проекту около 15 лет и вначале программа работала под DOS, окошки типа как в ncurses. База данных MSSQL обновление форм происходит по таймеру, частота которого задается в настройках, также на тулбаре есть кнопка "Обновить форму", в контекстном меню формы есть итем "Обновить форму", в меню "Файл" есть итем "Обновить все формы". Всё это работает через DBGrid. Мы в общем-то уже привыкли обновлять формы вручную перед тем как начать работать с данными. Редактирование данных выглядит как создание модального диалога с полями, то есть тут нет такого как редактирование ячеек в Excel. В момент вызова редактирования записи на SQL сервер высылается команда блокировка записи или целого списка записей (если было выделено несколько). Когда другой пользователь пытается отредактировать ту же запись ему выводится диалог с ProgressBar'ом и сообщение о том, что запись блокирована таким-то пользователем, при этом запускается таймер, который постоянно дергает таблицу на предмет освобождения записи. Ты можешь либо ждать своей очереди, либо нажать "Отмена". Бывает и такое, что запись давно уже удалена, а у тебя она есть в таблице. Естественно, при вызове редактирования, клиент спрашивает SQL сервер блокирована ли запись, существует ли она вообще. На мой взгляд это всё один большой костыль, но исходя из архитектуры SQL серверов выбора у программистов обычно не бывает. Кстати трафик между клиентами и SQL сервером просто огромен, поэтому если сервак в инете и нет безлимитки, то можно разориться.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 21.