Название: Обновить ComboBox Отправлено: cya-st от Февраль 19, 2010, 21:57 Всем привет...
Есть ComboBox, который привязан к полю таблицы БД. Выводится все нормально, но когда я вношу изменения в таблицу, то мне необходимо обновить отображение в ComboBox. Вопрос: как это сделать? Название: Re: Обновить ComboBox Отправлено: alexman от Февраль 22, 2010, 13:14 Например, по таймеру проверять поле БД и если изменилось содержимое, то менять combo box.
Название: Re: Обновить ComboBox Отправлено: crossly от Февраль 22, 2010, 19:30 зачем таймер.... если все на одной форме....то обновлять содержимое после удачного submit()
Название: Re: Обновить ComboBox Отправлено: SABROG от Февраль 22, 2010, 23:28 Нужно переопределять QComboBox::showPopup(), обновлять в нем модель и вызывать оригинальный/базовый showPopup().
В зависимости от скорости обработки SQL запроса и других факторов все это дело может подтормаживать. Поэтому логично будет добавить на тулбар кнопку типа "обновить форму" и обновлять модель уже в ней. Название: Re: Обновить ComboBox Отправлено: cya-st от Февраль 23, 2010, 00:00 Спасибо всем. Попробую переопределить showPopup.
Название: Re: Обновить ComboBox Отправлено: crossly от Февраль 23, 2010, 12:51 Нужно переопределять QComboBox::showPopup(), обновлять в нем модель и вызывать оригинальный/базовый showPopup(). думаю это излишне.... ведь в таком случае обновление будет при каждом показе списка.... при этом обновления в базе может и не быть...В зависимости от скорости обработки SQL запроса и других факторов все это дело может подтормаживать. Поэтому логично будет добавить на тулбар кнопку типа "обновить форму" и обновлять модель уже в ней. Название: Re: Обновить ComboBox Отправлено: SABROG от Февраль 23, 2010, 13:56 Нужно переопределять QComboBox::showPopup(), обновлять в нем модель и вызывать оригинальный/базовый showPopup(). думаю это излишне.... ведь в таком случае обновление будет при каждом показе списка.... при этом обновления в базе может и не быть...В зависимости от скорости обработки SQL запроса и других факторов все это дело может подтормаживать. Поэтому логично будет добавить на тулбар кнопку типа "обновить форму" и обновлять модель уже в ней. Я предложил 2 варианта и посоветовал использовать второй. Человек не захотел, это его выбор. В любом случае пока запрос к базе не сделаешь никогда не узнаешь обновилось в ней что-то или нет. Нормальный Notification поддерживает только PostgreSQL, но модель все равно этим не пользуется. Название: Re: Обновить ComboBox Отправлено: cya-st от Февраль 23, 2010, 16:24 Цитировать Я предложил 2 варианта и посоветовал использовать второй. Человек не захотел, это его выбор. В любом случае пока запрос к базе не сделаешь никогда не узнаешь обновилось в ней что-то или нет. Нормальный Notification поддерживает только PostgreSQL, но модель все равно этим не пользуется. Пришлось взять первый вариант. Так как это клиентская программа и клиентов может быть запущено определенное количество ив каждом клиенте могут добавлятся данные. Еще рассматривался вариант с таймером, но на мой взгляд переопределение QComboBox::showPopup() лучше. Название: Re: Обновить ComboBox Отправлено: SABROG от Февраль 23, 2010, 17:21 На работе я использую программу написанную на Дельфи, её стоимость около 60 тыс.руб. за лицензию. Многопользовательские лицензии конечно дешевле. Самому проекту около 15 лет и вначале программа работала под DOS, окошки типа как в ncurses. База данных MSSQL обновление форм происходит по таймеру, частота которого задается в настройках, также на тулбаре есть кнопка "Обновить форму", в контекстном меню формы есть итем "Обновить форму", в меню "Файл" есть итем "Обновить все формы". Всё это работает через DBGrid. Мы в общем-то уже привыкли обновлять формы вручную перед тем как начать работать с данными. Редактирование данных выглядит как создание модального диалога с полями, то есть тут нет такого как редактирование ячеек в Excel. В момент вызова редактирования записи на SQL сервер высылается команда блокировка записи или целого списка записей (если было выделено несколько). Когда другой пользователь пытается отредактировать ту же запись ему выводится диалог с ProgressBar'ом и сообщение о том, что запись блокирована таким-то пользователем, при этом запускается таймер, который постоянно дергает таблицу на предмет освобождения записи. Ты можешь либо ждать своей очереди, либо нажать "Отмена". Бывает и такое, что запись давно уже удалена, а у тебя она есть в таблице. Естественно, при вызове редактирования, клиент спрашивает SQL сервер блокирована ли запись, существует ли она вообще. На мой взгляд это всё один большой костыль, но исходя из архитектуры SQL серверов выбора у программистов обычно не бывает. Кстати трафик между клиентами и SQL сервером просто огромен, поэтому если сервак в инете и нет безлимитки, то можно разориться.
|