IBX - корректная работа с транзакциями

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

Модератор: kdv

Кузнецов Евгений
Сообщения: 144
Зарегистрирован: 16 фев 2006, 22:36

Сообщение Кузнецов Евгений » 09 мар 2007, 21:11

В рамках пессимистического подхода предлагается следующий вариант
функции сохранения, возвращающей результат:

Код: Выделить всё

function WriteDatum(out ErrorMessage: string; out SQLCode,
  IBErrorCode: Longint): Boolean;
begin
  Result:=False; 
  ErrorMessage:=''; // Сообщение об ошибке
  SQLCode:=0;       // Коды ошибки
  IBErrorCode:=0;
  try
    TW.StartTransaction;
    try
      Q1.ExecQuery;
      TW.Commit;
      Result:=True;
    except
      TW.Rollback;
      raise;
    end;   
  except
    on E:EIBError do begin
      ErrorMessage:=E.Message;
      SQLCode:=E.SQLCode;
      IBErrorCode:=E.IBErrorCode;
    end;
    on E:Exception do begin
      ErrorMessage:=E.Message;
    end;
  end;
end;
P.S. Естественно, WriteDatum - метод объекта, в котором объявлены TW и Q1

Ответить