Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.28;
Скачать: [xml.tar.bz2];




Вниз

Как пользователь может узнать о изменениях данных, сделанных другим пользователем? 


Savage   (2001-12-21 02:44) [0]

В сети висит несколько приложений на БД SQL Server 2000, одно из приложений, например, добавляет поле в таблицу, а другое должно получить сообщение о сделанном добавлении. Как это реализовать?



Desdechado   (2001-12-21 11:06) [1]

только путем повторного чтения интересующих данных



Delirium   (2001-12-21 12:39) [2]

Уже отвечал, но повтарюсь:
существуют три пути:
1) рассылать сообщения через свою dll(у меня на сайте), из тригееров
2) создать таблицу сообщений, заполнять её из тригееров и регулярно перечитывать
3) использовать SQL-Mail
Выбор за тобой :)



Desdechado   (2001-12-21 15:35) [3]

что такое SQL-Mail и в каких системах он работает?
что такое посылка сообщений из триггеров?



Delirium   (2001-12-21 15:48) [4]

Речь идёт о MSSQL

SQL-Mail:
читай Help по xp_sendmail;

посылка сообщений из триггеров:
из триггера (или откуда хочешь) запускаешь внешнюю процедуру (Extended Procedure), которая загружает твою dll и вызывает уже твою процедуру из dll. А в dll делай что хочешь - я, например, просто рассылаю строчки с указанием таблицы и ключа.



Xpdeveloper   (2001-12-22 06:59) [5]

В ADO есть очень изящный способ, там можно коннектиться к событиям - на добавление, удаление и движение по табличке, но для этого тоже надо сажать на каждую открытую табличку класс-ревизор, который это все и будет рассылать.



Delirium   (2001-12-22 12:39) [6]

> Xpdeveloper
Правильно-ли я понял: каждый клиент рассылает всем остальным сообщения о своих действиях?



Savage   (2001-12-23 02:52) [7]

>Delirium
Если сообщения рассылает клиент, то этот способ не годится, так как зависит от протоколов, имеющихся на каждом компьютере клиента, а вот если бы сообщения рассылал сам сервер, то нам протоколы не важны...
Да и это более надежно, хотя тут можно поспорить



Васев Дмитрий   (2001-12-23 11:45) [8]

Подожди пару лет может MS и сможет встроить данную возможность в SQL, но врядли, своих мозгов у них не хватит, опять возьмут чужое. Расылка сообщений об изменениях в базе реализована в Oracle 9 и IB. Причем Oracle использует технологию Borland.



Desdechado   (2001-12-23 15:02) [9]

2 Васев Дмитрий
поподробнее об IB, пожалуйста



ink   (2001-12-24 10:18) [10]

В IB существует такое понятие как EVENT. Это сообщение посланное сервером БД всем клиентам, которые "сказали" свою заинтерисованность в сообщении. Легко реализуется с помощью такой хранимой процетуры
create procedure send_message (
name_event varchar(40)
)
as begin
post_event name_event;
end
###
Но есть маленькая тонкость, не стоит посылать сообщение пока не закончил транзакцию, а то изменение не увидишь :-).



Delirium   (2001-12-24 11:10) [11]

>Savage
"Если сообщения рассылает клиент, то этот способ не годится, так как зависит от протоколов, имеющихся на каждом компьютере клиента, а вот если бы сообщения рассылал сам сервер, то нам протоколы не важны..."

Совершенно согласен, именно это я и имел ввиду обращаясь к Xpdeveloper.
Сообщения должны идти именно от сервера и именно из триггеров, как гарантия того, что изменения уже призошли.




Delirium   (2001-12-24 11:19) [12]

Моя dll-ка работает примерно так-же в MSSQL

exec SendShortMessage "192.168.1.255:1234","Привет!"

а в Delphi ставишь IdUDPServer и слушаешь сообщения :)



Savage   (2001-12-24 13:48) [13]

>Delirium
Опиши по подробнее как с ней работать, и еще вопрос беспрецедентной наглости: исходники можно глянуть?



Delirium   (2001-12-24 14:01) [14]

Исходники - простые до смеха, поэтому и не показываю :)
А прользываться просто:
Регистрируешь Extended Stored Procedure - база данных master.
SendShortMessage - имя процедуры, Messager.dll - собственно, нужная dll-ка у меня на сайте выложена.
Вот и всё, теперь в любом месте в SQL можно написать:

declare @Host VarChar(128) Set @Host="192.168.1.22:1234" -- или Set @Host="My_Komp:1234"
declare @Msg VarChar(128) Set @Msg="Test message"
exec master.dbo.SendShortMessage @Host,@Msg

Мессага полетела в 1234-й порт на IP= 192.168.1.22
Для рассылки использую IdUDPClient, следоватьельно ловить лучше всего IdUDPServer-ом. Можно рассылать и BROAD CAST - @Host="192.168.1. 255:1234" теперь сообщение получат все, у кого IP-шник начинается с 192.168.1
Вот собственно и всё :)



Сомневающийся   (2001-12-24 16:03) [15]

Заодно и еще чего-нибудь куда-нибудь пошлет..



Delirium   (2001-12-24 16:12) [16]

>Сомневающийся
У меня работает уже 2 месяца: безглючно, среднее время прохождения сообщения от сервера до клиентов - 50мс.



Delirium   (2001-12-24 17:54) [17]

>Сомневающийся
Не троян, если ты это имел в виду :))))




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.28;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.029 c
3-90225           DiggerAbstract        2001-12-24 11:28  2002.01.28  
Кэширование изменений


1-90245           LakeMan               2002-01-09 12:00  2002.01.28  
компонент TCrpe. Помогите пожалуйста


1-90243           Хлор                  2002-01-08 05:43  2002.01.28  
Здравствуйте! Пиплы подскажите как сохранить все форму с объектами наход. на ней


14-90368          fliz                  2001-12-04 14:57  2002.01.28  
мне вот тут приколы прислали ...


14-90356          limon                 2001-12-03 19:07  2002.01.28  
FW: ПОСЛЕДНИЕ СЛОВА компьютера: