GetInfo.Ru – Компьютерная библиотека
Последние поступления
Как выбрать систему управления базы данных
Базы данных03/09/14
Этапы загрузки UNIX (в схеме)
Unix27/03/12
Gatewall Antispam: тотальный контроль электронной почты
Спам21/04/11
Мастер-класс: создаем Интернет-магазин (Часть 1)
Обзоры ПО20/04/11
CorelDRAW Graphics Suite X5: Что нового?
Обзоры ПО20/07/10
Добавить статью
Самые читаемые материалы
Работа с библиотеками динамической компоновки (DLL)(19484)
Будущие возможности языка программирования C#(14613)
C или C++?(11418)
Интервью Bjarne Stroustrup, данное 1 января 1998 года для журнала Computer(11291)
Модуль для работы с ассоциативными массивами в C++ Builder 5.0(9576)
Всего статей: 793Всего авторов: 364Подразделов: 47Добавлено за сутки: 0
Статьи  СТАТЬИ Форум  ФОРУМ Рейтинг  РЕЙТИНГ Поиск  ПОИСК Контакты  КОНТАКТЫ
» Главная » C/C++ » Получение уведомлений MS SQL сервера в С++ Builder

Получение уведомлений MS SQL сервера в С++ Builder


Станислав Васильев
StasVasiljev@yandex.ru
http://www.messageapi.narod.ru

В клиент-серверных задачах порою требуется получить по некоемому событию на SQL сервере уведомление на клиенте, при этом не опрашивая о случившихся изменениях. Реализовать данную функциональность возможно с использованием расширенной хранимой процедуры (extended stored procedure), представляющей из себя динамически подключаемую библиотеку, которая через сокеты по протоколу UDP будет рассылать бродкаст (broadcast) пакеты по сети. Создание расширенной хранимой процедуры производилось мною в среде С++ Builder 6 c использованием ODS (Open Data Service) API для СУБД MS SQL Server 2000. Необходимо обратить внимание, что по умолчанию в поставку данной среды разработки от Borland входит статическая библиотека Opends60.lib, реализующая весь сервис предоставляемой ODS API, но данная библиотека имеет устаревшую версию и поддерживает только MS SQL 7. Взять файл импорта библиотеки можно отсюда или сформировать его самостоятельно с использованием утилиты Implib. Также следует отметить, что протокол UDP не гарантирует доставку сообщения, но и не требует установления соединения, как скажем TCP, что является решающим при выборе способа доставки.

Простейшим примером использования механизма уведомления, является генерация события отсылки оповещения из триггера таблицы аудита пользователей при добавлении новой записи. Таблица, именуемая EVENTS, имеет структуру, состоящую из уникального идентификатора записи, логина пользователя и информационного сообщения, о котором надо уведомить всех заинтересованных подписчиков. Расширенная процедура "xp_event" может иметь следующие входные параметры: <имя хоста>, <номер порта>, <текст сообщения>, <имя пользователя>, <идентификатор записи>. В качестве имени хоста можно задать широковещательный адрес. К примеру, 223.1.2.255 (net-directed broadcast – вещание в пределах сети 223.1.2.XXX), 255.255.255.255 (limited broadcast address), когда хост может не знать собственной маски подсети и своего IP адреса, а можно и просто сетевое имя машины локальной сети. Обратите внимание, что если ваша сеть разделена на подсети, то маршрутизатор не пропустит широковещательные пакеты без дополнитель ной настройки. Номер порта UDP произволен, но следует избегать при настройке системных портов используемых операционной системой. По умолчанию на клиенте для прослушивания используется порт 3338.

Компонент TSQLAlerter имеет два метода: Start и Stop, которые соответственно создают новый процесс для прослушивания порта и останавливают его, т.е. клиент выступает в роли UDP сервера. Событие OnGetMessage наступает в момент получения оповещения, а указатель на визуальный компонент TLabel позволяет визуализировать полученное сообщение на форме. Структура, используемая для пересылки данных имеет следующий вид:

typedef struct TDATASEND      // Структура для пересылки
{
  char message[1024]; 
  char login[1024];
  long id;
}  TDATASEND;

Поток получает уведомление и в методе AddMessage() синхронизирует свойства Message, RecordId и Login обьекта класса TSQLAlerter. Свойство Language отвечает за язык, используемый при визуализации основных сообщений об ошибках в работе компонента. Пример регистрации процедуры и реализации отсылки уведомления можно посмотреть в скрипте TSQLAlerter.sql.

 
14.03.2006
Версия для печати Версия для печати Запомнить ссылку Запомнить ссылку
Ваша оценка:  1   2   3   4   5     

 О проектеПерепечаткаАвторамПартнерыО нас пишут
Наверх
©2003—2007. GETINFO.RU. ВСЕ ПРАВА ЗАЩИЩЕНЫ.