Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.20;
Скачать: CL | DM;

Вниз

Проблема с использованием Events в Interbase   Найти похожие ветки 

 
Dron   (2004-05-25 16:05) [0]

Здравствуйте. У меня такая проблема. У меня есть БД на Interbase  и программа, которая автоматически раз в час заносит в нее данные. Сейчас я пишу клиента на Delphi для работы с ней. В клиенте мне необходимо отслеживать момент, когда другая программа, которая заносит в нее данные, заканчивает вносить в неее данные. Хочу использовать Events в Interbase. Но с ними у меня возникла проблема. Для начала я сделал пробную БД с одной таблицей, в ее триггере после вставки я добавил свой Event:

CREATE TRIGGER MY_TABLE_AI0 FOR MY_TABLE
ACTIVE AFTER INSERT POSITION 0
AS
begin
 post_event "test";
end

В Delphi на форму кинул IBDatabase,IBTransaction,IBEvents и IBQuery. Все настроил в свойствах. Добавил кнопку в обработчике, которой добавлял записив таблицу. Исходный текст тестовой проги :

procedure TForm1.FormCreate(Sender: TObject);
begin
IBDatabase1.Connected := true;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
IBDatabase1.Connected := false;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
with IBQuery1 do
 begin
 Close;
 SQL.Clear;
//здесь я просто добавляю строку в таблицу
 SQL.Add("insert into my_table (some_field,field2) values (2,1)");
 ExecSQL;
 end;
end;

procedure TForm1.IBEvents1EventAlert(Sender: TObject; EventName: String;
 EventCount: Integer; var CancelAlerts: Boolean);
begin
Form1.Caption := "asd";//просто для теста
end;

В IBEvents в свойствах установил AutoRegister в true и добавил в Events строку test. Запускаю, нажимаю на кнопку - ничего не происходит. Смотрю в таблице - записи появляются, а приложение никак не отлавливает мой Event в триггере. В чем может быть причина? Где ошибка - в БД или в тестовой проге? Подскажите, кто-что думает по этому поводу.


 
Johnmen ©   (2004-05-25 16:14) [1]

Надо завершать транзакцию, тогда и пост прилетит...:)
...
IBTransaction.StartTransaction;
ExecSQL;
IBTransaction.CommitRetaining;
<прилетел!>
...


 
VLAD-MAL   (2004-05-25 16:17) [2]

Полагаю, ты забыл выполнить Commit после Insert. Все эвентсы (в т.ч. и "свои") стреляют по коммитам.

procedure TForm1.Button1Click(Sender: TObject);
begin
with IBQuery1 do
begin
Close;
SQL.Clear;
//здесь я просто добавляю строку в таблицу
SQL.Add("insert into my_table (some_field,field2) values (2,1)");
ExecSQL;
Transaction.Commit
end;
end;


 
Dron   (2004-05-25 16:23) [3]

Спасибо. Все работает. Вот о чем забыл, о том забыл. Большое человеческое спасибо :)!!!!!!!!!!!



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

Текущий архив: 2004.06.20;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.072 c
14-1086082718
Computerny_Geniy
2004-06-01 13:38
2004.06.20
Сообщение перед спящим режимом


9-1077653558
Support1
2004-02-24 23:12
2004.06.20
Вопрос по DelphiGFX .....


3-1085494091
Tom
2004-05-25 18:08
2004.06.20
TADOQuery.LoadFromFile


4-1084621171
Mameluke
2004-05-15 15:39
2004.06.20
Help по WinAPI Delphi


8-1081353832
Wm.DIGGER
2004-04-07 20:03
2004.06.20
Запись AVI шек ...