|
Delphi 5 - как получать в приложениях сообщения о изменении данных на сервере
|
|||
---|---|---|---|
#18+
Есть приложение - пишу на Делфи, использую компоненты ADO для обращение к базе данных MS SQL Server 7.0 Проблема такая: нужно обновить информацию на экране в приложение, если на сервере произошло какое либо изменение в базе данных (допусти кто-то вставил или удалил запись из другого приложения) Что нужно сделать на сервере или в приложении чтобы в приложении увидеть изменение данных ? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2000, 18:50 |
|
Delphi 5 - как получать в приложениях сообщения о изменении данных на сервере
|
|||
---|---|---|---|
#18+
По-моему, готовых встроенных средств для решения такой задачи нет. Надо как то самому изощряться. Например, в триггере на всевозможные модификации таблицы, изменения в которой необходимо отслеживать, записывать информацию о корректировке данных в специальную таблицу. При этом можно указывать дату изменения и другую полезную информацию. А в клиентском приложении создать дополнительный поток, время от времени обращающийся к той специальной таблице и проверяющий, не изменились ли данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2000, 10:33 |
|
Delphi 5 - как получать в приложениях сообщения о изменении данных на сервере
|
|||
---|---|---|---|
#18+
А можно более сложный вариант, чем предложенный выше и позволяющий организовать взаимодействие в режиме реального времини. Внешняя хранимая процедуры на SQL Server-е (написанная на C) обращается к DCOM объекту, а тот посылает сообщение другому DCOM объекту, который находится на клиентском ПК. И от него сообщение поступает в клинтскую программу, написанную на Delphi (т.к. в COM объектах есть механизм событий). Но, честно скажу, хотя теоретически уверен, что это возможно, сам практически подобные вещи делать не пытался. Не было такой насущной необходимости. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2000, 10:43 |
|
Delphi 5 - как получать в приложениях сообщения о изменении данных на сервере
|
|||
---|---|---|---|
#18+
Решение, которое предложил maximF очень простое и надежное. Если много клиентов и каждый клиент время от времени будет обращающийся к специальной таблице и проверять, не изменились ли данные, то эти проверки могут сильно загрузить SQL сервер. Решение, которое предложил Oleg F более сложное и не будет сильно загружать SQL сервер. Можно упростить решение Oleg F, если в место DCOM объектов использовать сервис MSMQ ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2000, 11:28 |
|
Delphi 5 - как получать в приложениях сообщения о изменении данных на сервере
|
|||
---|---|---|---|
#18+
Я сильно извеняюсь. А что такое MSMQ ? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2000, 18:21 |
|
Delphi 5 - как получать в приложениях сообщения о изменении данных на сервере
|
|||
---|---|---|---|
#18+
http://www.microsoft.com/msmq ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2000, 07:14 |
|
Delphi 5 - как получать в приложениях сообщения о изменении данных на сервере
|
|||
---|---|---|---|
#18+
Вообще - то ADOConnection.OnInfoMessage - По сообщению с сервера должна сработать. Но у меня пока не ююю Может у тебя получится, по Raiserror ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2000, 09:59 |
|
Delphi 5 - как получать в приложениях сообщения о изменении данных на сервере
|
|||
---|---|---|---|
#18+
InfoMessage случается только в ПРОЦЕССЕ УСТАНОВКИ соединения. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2000, 07:17 |
|
Delphi 5 - как получать в приложениях сообщения о изменении данных на сервере
|
|||
---|---|---|---|
#18+
Raiserror не спасает, так как message получает только текущее соединение. В задаче же, насколько я понимаю, требуется чтобы данные обновлялись на экранах всех клиентов. Отсутствие поддержки событий уровня сервера раздражает, но я надеюсь, что в след.версии это исправится. Ну да об этом еще рано. Пока с точки зрения масштабируемости (но не гемора) наиболее оптимален вариант, предложенный Вадимом. Я его в свое время проверял. На уровне middleware создается COM-компонента, единственный метод которой пишет в очередь MSMQ переданные ему параметры. Триггер на insert/update/delete создает (sp_OACreate) инстанс этой компоненты и вызывает ее метод. Клиент реализует интерфейсы MSMQ и привязывается к очереди. По приходу в очередь нового сообщения на клиенте вспыхивает событие, в обработчик которого можно положить, напр., refresh grid'a. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2000, 09:09 |
|
Delphi 5 - как получать в приложениях сообщения о изменении данных на сервере
|
|||
---|---|---|---|
#18+
Я поискал про 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? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2000, 10:15 |
|
Delphi 5 - как получать в приложениях сообщения о изменении данных на сервере
|
|||
---|---|---|---|
#18+
Не знаю как в других серверах, но в IB начиная с 5.6 этот механизм реализован. Причем Инпрайзовцы кричат, что он патентован. Так что сомнительно ждать появление такой возможности в MSSQL. Хотя и то, что сделано в IB меня не до конца устраивает. Да, если на клиенте указать необходимость регистрации серверного события (которое там должно быть соответствующим образом сгенерировано в коде триггера/процедуры), событие на клиенте произойдет, но никакого параметра клиент не получит. Просто голое событие. Как-то это не совсем правильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2000, 11:32 |
|
Delphi 5 - как получать в приложениях сообщения о изменении данных на сервере
|
|||
---|---|---|---|
#18+
To: Oleg F - где взять MSMQ. С Windows 2000 все точно. Он туда входит по определению. Если у тебя NT Enterprise Edition, то он лежит на втором диске в составе Option Pack. Если NT - обычная, то Microsoft предлагает 2 пути. Либо приобрести Option Pack у ближайшего реселлера за $99.95, либо на халяву качать его с сайта ( http://www.microsoft.com/ntserver/nts/downloads/recommended/NT4OptPk/default.asp). Сколько места он занимает, я, честно говоря, не помню. После того, как поставишь, накати свой SP5 заново (а еще лучше - SP6a). To: Павел Я думаю, что сомнения необоснованы. Если только Borland не намерен запатентовать SQL, XML, C++ и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2000, 12:53 |
|
Delphi 5 - как получать в приложениях сообщения о изменении данных на сервере
|
|||
---|---|---|---|
#18+
Какова цель? Варианты: 1.Гарантированно доставить сообщение пользователю о событии на сервере. 2.Использовать средства, имеющиеся в наличии у сервера. При первом варианте - возможно и использование MSMQ и собственные приложения на основе, хотя бы WINSOSKET ... Плюсы - гарантированная доставка. Недостатки - неявная связка HOSTNAME и SPID, работа с удалённым сервером при ограничении доступа к последнему. Второй работает через srv_sendmessage и поллинг в отдельном thread'e. Устанавливается обработчик сообщений dbhandlemessage поверх стандартного. Плюс - не задействуются дополнительные ресурсы, DBPROCESS прозрачен. Недостатки - тяжело организовать broadcasting, работа с удалённым сервером т.к. после выполнения RPC соединение между серверами закрывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2000, 17:23 |
|
|
start [/forum/topic.php?fid=46&fpage=3596&tid=1827556]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 252ms |
total: | 383ms |
0 / 0 |