Обновление таблиц при изменении базы другим пользователем

Zorx
Дата: 01.03.2003 01:43:46
А кто как выкручивается если нужно обновлять таблички в куче форм при изменении базы другим пользователем?
Какие есть пути решения...

Хотелось бы автоматом =) но это не реально =(

ЗЫ
Dynamic cursor - нет букмарков =( соответственно нет DBGrid'ов
Zorx
Дата: 01.03.2003 02:05:41
Виктор
Дата: 01.03.2003 03:37:20
Ты какую СУБД используешь, MSSQL ?
Я работаю с Oracle, и там такие вещи давным давно решены :-)
Переходи на Oracle .
Zorx
Дата: 01.03.2003 13:07:38
ok как это в оракле решено..
можно поподробнее
Виктор
Дата: 03.03.2003 02:48:29
В Oracle существуют два встроенных модуля, предназначенных для взаимодействия между соединениями, или сеансами (sessions). Это модули DBMS_PIPE и DBMS_ALERT. Также есть модуль Advanced Queuing (AQ).

У меня сделано на DBMS_ALERT.
Для отслеживания изменения таблички в триггере на эту табличку делаем посылку сообщения DBMS_ALERT.SIGNAL
На клиентах регистрируем заинтересованность в оповещении и на приход оповещения вещаем refresh набора данных.
С PIPE и AQ можно также это сделать, но там всё навороченнее, для более сложных задач.
А еще подробнее можешь в хелпе почитать :-)
tygra
Дата: 03.03.2003 10:38:20
Я вот только не понимаю - зачем все эти оповещения? Трафика не жалко с сервером? Каждый раз всем клиентам refresh делать - не слабая нагрузочка. А если я открыл 10 форм и курить ушел на два часа - а у меня тут все обновляется, ворочается. Смешно!
Zorx
Дата: 03.03.2003 20:41:46
Вот и я об этом думал... жалко однако... сделал кнопку рефреш =)
Виктор
Дата: 04.03.2003 02:14:03
Про траффик - это верно, стало его жалко. Поэтому сделал так - рефрешится только активная форма справочника и только в том случае, если фокус находится в этом приложении.
Ну и плюс дополнительная кнопка Обновить :-))
По желанию можно отключить автоматическое обновление, и пользоваться кнопкой.
Aleksei
Дата: 05.03.2003 12:18:48
Такая же была проблема.
Я лично пошол по такому пути:
1) Создал кнопку "Обновить" (при нажитии которой выполняется Refreh)
2)Поставил компонент Timer (который через нужный мне интервал времени
эмитирует нажатие кнопки "Обновить" Button1.OnCliсk(Form1))
3)Перед тем как изменять данные в БД опять иметирую нажатие
кнопки "Обновить"

Что касается таймера- его можно и выключить.