Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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]

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



Страницы: 1 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.004 c
1-90280
FX_Demon
2002-01-09 20:31
2002.01.28
!!OpenGL!!


1-90313
NLO
2002-01-11 07:10
2002.01.28
AutoCAD


4-90419
bob green
2001-11-29 08:57
2002.01.28
WinAPI


3-90203
Andrey196
2001-12-23 19:49
2002.01.28
Помогите!!! :)


14-90367
M-A-B
2001-12-04 12:13
2002.01.28
SQL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский