Одна программа делает в таблице запись, регистрирует событие и переходит в режим ожидания эвента в TSibFIBEventAlerter.
Вторая программа просматривает эту таблицу через TPFIBDataSet, для каждой записи вызывает delete+commitretaining и через хп, использующую ту же самую updatetransaction, соответствующее событие:
Код: Выделить всё
procedure TDM.StartEvent(aID: integer);
var
b : bool;
begin
if NOT IntDB.Connected then
Exit;
b:=IntWT.InTransaction;
if NOT b then
IntWT.StartTransaction;
sp_Event.Prepare;
sp_Event.Params[0].AsInteger:=aID;
try
sp_Event.ExecProc; //POST_EVENT 'eaAccepted'
if NOT b then
IntWT.Commit
else
IntWT.CommitRetaining
except
if b then
IntWT.RollbackRetaining
else
IntWT.Rollback
end
end;
write
nowait
rec_version
read_committed
Так вот нифига первая программа в таком раскладе не ловит. В ситуациях, когда транзакции вызывается commit - все нормально. А для commitretaining - фигня. Оно так и должно быть и я чего-то недопонимаю?