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