Событие не ловится, если транзакция в действии

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
Aleksandr.
Сообщения: 63
Зарегистрирован: 18 май 2005, 19:13

Событие не ловится, если транзакция в действии

Сообщение Aleksandr. » 26 окт 2006, 14:10

Используются компоненты FibPlus, FireBird 2.
Одна программа делает в таблице запись, регистрирует событие и переходит в режим ожидания эвента в 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 - фигня. Оно так и должно быть и я чего-то недопонимаю?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 26 окт 2006, 15:04

читай доку. евенты рассылаются только по commit.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 26 окт 2006, 15:46

А еще почитай о изоляции транзакции. И подумай - увидит ли вторая программа запись которую первая вставила, но не закоммитила.

Aleksandr.
Сообщения: 63
Зарегистрирован: 18 май 2005, 19:13

Сообщение Aleksandr. » 26 окт 2006, 16:19

Спасибо.

Ответить