M Y D E L P H I 7 . R U Самоучитель программирования  
 
  • Главная
  •  

     

    Компонент TIBTransaction

    Компонент TIBTransaction инкапсулирует средства управления транзакцией при работе с сервером InterBase. Для этого он должен быть связан с компонентом TiBDatabase при помощи своего свойства

    property DefaultDatabase: TiBDatabase;

    Один компонент транзакции может быть связан с несколькими компонентами TiBDatabase. Для этого необходимо задать один компонент транзакции в свойствах DefaultTransaction всех необходимых компонентов соединений (см. выше). Список всех связанных компонентов соединений содержится в свойстве

    property Databases[index: Integer]: TiBDatabase;

    а их общее число возвращает свойство

    property DatabaseCount: Integer;

    Во время выполнения новое соединение может быть связано с транзакцией методом

    function AddDatabase(db: TIBDatabase): Integer;

    Или же, связь может быть отменена:

    procedure RemoveDatabase(Idx: Integer);

    А метод

    procedure RemoveDatabases;

    разрывает все установленные связи с компонентом TIBDatabase.

    Индекс связанного соединения в списке Databases транзакции можно получить при помощи метода

    function FindDatabase (db: TIBDatabase): Integer;

    Например, если вам не известно ничего, кроме имени компонента, можно поступить так:

    var i, Findex: Integer;

    ...

    for i := 0 to Forml.ComponentCount — 1 do

     if Forml.Components[i].Name = 'IBDatabasel'

    then Findex := 

    IBTransactionl.FindDatabase(TIBDatabase(Forml. Components[i]));

    ...

    Соединение, заданное по умолчанию свойством DefaultDatabase, возвращает метод

    function FindDefaultDatabase: TIBDatabase;

    Транзакция может иметь набор параметров, задать которые можно при помощи свойства

    property Params: TStrings;

    аналогично компоненту TIBDatabase. Прямой доступ для чтения к буферу параметров транзакции Transaction Parameters Buffer (TPB) типа pchar обеспечивает свойство

    property TPB: PChar;

    Длина буфера содержится в свойстве

    property TPBLength: Short;

    Дескриптор транзакции представлен свойством

    property Handle: TISC_TR_HANDLE;

    После того как транзакция настроена, ее можно начать, сохранить или отменить.

    Транзакция стартует при помощи метода

    procedure StartTransaction;

    При необходимости сохранить все сделанные в рамках текущей транзакции изменения используется метод

    procedure Commit;

    Если выполненные действия нужно отменить, применяется метод

    procedure Rollback;

    Для открытия и сохранения транзакции можно использовать традиционное свойство

    property Active: Boolean;

    После начала новой транзакции свойство

    property InTransaction: Boolean;

    принимает значение True, а после фиксации или отката — значение False.

    При работе с сервером InterBase 6.0 можно использовать методы commit-Retaining и RollbackRetaining. В отличие от стандартных операций фиксации и отката транзакций, эти методы после передачи или отмены изменений оставляют текущую транзакцию открытой.

    Если сервер перегружен и не откликается на транзакцию, то по истечении времени, заданного свойством

    property IdleTimer: Integer;

     выполняется действие, заданное свойством

    type TTransactionAction = (taRollback, taCommit, taRollbackRetaining,

    taCommitRetaining);

    property DefaultAction: TTransactionAction;

    taRollback — откат транзакции; 

    taCommit — фиксация транзакции;

    taRollbackRetaining — отмена изменений без завершения транзакции (для сервера InterBase 6.0);

     taCommitRetaining — фиксация изменений без завершения транзакции (для сервера InterBase 6.0).

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

    Для этого свойство

    type TAutoStopAction = (saNone, saRollback, saCoramit,

     saRollbackRetaining, saCommitRetaining); property AutoStopAction : TAutoStopAction;

    не должно иметь значение saNone.

    Остальные значения свойства выполняют следующие действия:

    •  saRollback — откат транзакции;
    •  saCommit — фиксация транзакции;
    •  saRollbackRetaining — отмена изменений без завершения транзакции (для сервера InterBase 6.0);
    •  saCommitRetaining — фиксация изменений без завершения транзакции (для сервера InterBase 6.0).

    Метод

    procedure CheckAutoStop;

    выполняет действие, предусмотренное текущим значением свойства

    AutoStopAction.

    Диагностика состояния транзакции во время выполнения осуществляется группой специальных методов. В случае отрицательного результата все они генерируют исключение EiBClientError.

    Метод

    procedure CheckDatabasesInList;

    проверяет, имеются ли в списке Databases связанные соединения. Метод

    procedure ChecklnTransaction;

    проверяет, открыта ли в данный момент транзакция. Метод

    procedure CheckNotlnTransaction;

    проверяет, закрыта ли в данный момент транзакция.

    Единственный метод-обработчик транзакции

    property OnldleTimer: TNotifyEvent;

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