Компонент
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.
|