Delphi 5 - как получать в приложениях сообщения о изменении данных на сервере
Игорь
Дата: 03.12.2000 18:50:44
Есть приложение - пишу на Делфи, использую компоненты ADO
для обращение к базе данных MS SQL Server 7.0
Проблема такая: нужно обновить информацию на экране в приложение,
если на сервере произошло какое либо изменение в базе данных
(допусти кто-то вставил или удалил запись из другого приложения)
Что нужно сделать на сервере или в приложении чтобы в приложении увидеть
изменение данных ?
maximF
Дата: 04.12.2000 10:33:05
По-моему, готовых встроенных средств для решения такой задачи нет.
Надо как то самому изощряться. Например, в триггере на всевозможные модификации таблицы, изменения в которой необходимо отслеживать, записывать информацию о корректировке данных в специальную таблицу. При этом можно указывать дату изменения и другую полезную информацию.
А в клиентском приложении создать дополнительный поток, время от времени обращающийся к той специальной таблице и проверяющий, не изменились ли данные.
Oleg F
Дата: 04.12.2000 10:43:58
А можно более сложный вариант, чем предложенный выше и позволяющий организовать взаимодействие в режиме реального времини. Внешняя хранимая процедуры на SQL Server-е (написанная на C) обращается к DCOM объекту, а тот посылает сообщение другому DCOM объекту, который находится на клиентском ПК. И от него сообщение поступает в клинтскую программу, написанную на Delphi (т.к. в COM объектах есть механизм событий). Но, честно скажу, хотя теоретически уверен, что это возможно, сам практически подобные вещи делать не пытался. Не было такой насущной необходимости.
VadimB
Дата: 04.12.2000 11:28:57
Решение, которое предложил maximF очень простое и надежное.
Если много клиентов и каждый клиент время от времени будет обращающийся к специальной таблице и проверять,
не изменились ли данные, то эти проверки могут сильно загрузить SQL сервер.
Решение, которое предложил Oleg F более сложное и не будет сильно загружать SQL сервер.
Можно упростить решение Oleg F, если в место DCOM объектов использовать сервис MSMQ
Павел
Дата: 04.12.2000 18:21:47
Я сильно извеняюсь. А что такое MSMQ ?
VadimB
Дата: 05.12.2000 07:14:19
http://www.microsoft.com/msmq
RUSLAN
Дата: 05.12.2000 09:59:33
Вообще - то ADOConnection.OnInfoMessage - По сообщению с сервера должна сработать.
Но у меня пока не ююю
Может у тебя получится, по Raiserror
Павел
Дата: 06.12.2000 07:17:11
InfoMessage случается только в ПРОЦЕССЕ УСТАНОВКИ соединения.
Дед Маздай
Дата: 06.12.2000 09:09:00
Raiserror не спасает, так как message получает только текущее соединение. В задаче же, насколько я понимаю, требуется чтобы данные обновлялись на экранах всех клиентов. Отсутствие поддержки событий уровня сервера раздражает, но я надеюсь, что в след.версии это исправится. Ну да об этом еще рано. Пока с точки зрения масштабируемости (но не гемора) наиболее оптимален вариант, предложенный Вадимом. Я его в свое время проверял. На уровне middleware создается COM-компонента, единственный метод которой пишет в очередь MSMQ переданные ему параметры. Триггер на insert/update/delete создает (sp_OACreate) инстанс этой компоненты и вызывает ее метод. Клиент реализует интерфейсы MSMQ и привязывается к очереди. По приходу в очередь нового сообщения на клиенте вспыхивает событие, в обработчик которого можно положить, напр., refresh grid'a.
Oleg F
Дата: 06.12.2000 10:15:40
Я поискал про MSMQ информацию, вроде как в Windows2000 он интегрирован. Но Windows2000 мне пока не нужен, у меня Windows NT Server 4.0 SP5 и клиенты под Windows95.
И вот тут какие-то разночтения. В одних местах пишут, что MSMQ интегрирован в Windows NT Server 4.0 (или "будет включён в ближайшие версии Windows NT 4.0), в других местах описывают отдельный продукт Microsoft Message Queue Server 1.0, у которого есть клиентское и серверное программное обеспечение, графические утилиты администрирования и документация (Administrator's Guide и Programmer's Reference). В описании SP5 для Windows NT 4.0 упоминается, что в него входит патч для MSMQ (значит, MSMQ изначально есть в Windows NT 4.0 ?).
То, что я прочитал про функциональные возможности MSMQ мне понравилось, штука полезная. Но как его начать использовать, какие программы нужно устанавливать на Windows NT и Windows95? Или в Windows NT какой-то MSMQ-сервис есть, который можно запустить? И где утилиты удалённого администрирования этим MSMQ?