Delphi 3 и создание приложений баз данных

         

Обмен сообщениями между приложениями


Пусть одновременно должны работать два клиентских приложения А и В, использующие одну и ту же удаленную БД. В процессе работы приложение В шлет сообщение приложению А, а то, в свою очередь, шлет приложению В подтверждение приема посланного сообщения.

Определим в удаленной БД следующие процедуры:

CREATE PROCEDURE B_SEND_INIT

AS

BEGIN

POST_EVENT "B_LOADED";

END

CREATE PROCEDURE A_SEND_INIT

AS

BEGIN

POST_EVENT "A_LOADED";

END

В форме приложения В разместим компоненты DatabaseB, IBEventAlerterB, StoredProcB (рис. 34.2).

Компонент DatabaseB управляет соединением приложения В с удаленной БД, общей для приложений А и В. Компонент StoredProcB предназначен для вызова хранимой процедуры B_SEND_INIT после нажатия кнопки "Послать сообщение к А":

procedure TFormB.SendButtonClick(Sender: TObject);

begin



DataBaseB.StartTransaction;

StoredProcB.ExecProc;

DataBaseB.Commit;

end;

ЗАМЕЧАНИЕ.

Как можно заметить, вызов хранимой процедуры на сервере должен происходить в рамках подтвержденной транзакции:

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

Компонент IBEventAlerterB отслеживает получение от сервера БД сообщения о наступлении события "A_LOADED". В этом случае просто визуализируется полученное сообщение в компоненте ListBoxB:

procedure TFormB.IBEventAlerterBEventAlert(Sender: TObject;

EventName: string; EventCount: Longint; var CancelAlerts:

Boolean) ;

begin

ListBoxB.Items.Add(EventName) ;

end;

В форме приложения А (рис. 34.3) размещены компоненты DatabaseA, IBEvenlAlerterA, StoredProcA.

Компонент DatabaseA управляет соединением приложения А с удаленной БД, общей для приложений А и В. Компонент StoredProcA предназначен для вызова хранимой процедуры A_SEND_INIT. Этот вызов происходит после получения компонентом IBEventAlerter А уведомления о наступлении события "B_LOADED":

procedure TFormA.IBEventAlerterAEventAlert(Sender: TObject;

EventName: string; EventCount: Longint; var CancelAlerts:

Boolean);

begin

ListBoxA.Items.Add(EventName) ;

DataBaseA.StartTransaction;

StoredProcA.ExecProc;

DataBaseA.Commit;

end;



Содержание раздела