Транзакции
Транзакции
Компонент TADOconnection позволяет выполнять транзакции. Методы
function BeginTrans: Integer;
procedure CommitTrans;
procedure RollbackTrans;
обеспечивают начало, фиксацию и откат транзакции соответственно. Методы-обработчики
TBeginTransCompleteEvent = procedure(Connection: TADOConnection;
TransactionLevel: Integer;
const Error: Error;
var EventStatus:
TEventStatus) of object;
property OnBeginTransComplete: TBeginTransCompleteEvent;
TConnectErrorEvent = procedure(Connection: TADOConnection;
Error: Error;
var EventStatus: TEventStatus) of object;
property OnCornmitTransComplete: TConnectErrorEvent;
вызываются после начала и фиксации транзакции. Свойство
type TIsolationLevel = (ilUnspecified, ilChaos, ilReadUncommitted, ilBrowse, ilCursorStability, ilReadCorranitted, ilRepeatableRead, ilSerializable, illsolated);
property IsolationLevel: TIsolationLevel;
позволяет задать уровень изоляции транзакции:
- IlUnspecif led — уровень изоляции не задается;
- Iichaos — изменения более защищенных транзакций не перезаписываются данной транзакцией;
- IlReadUncommitted — незафиксированные изменения других транзакций видимы;
- IlBrowse — незафиксированные изменения других транзакций видимы;
- IlCursorStability — изменения других транзакций видимы только после фиксации;
- IlReadCommitted — изменения других транзакций видимы только после фиксации;
- IlRepeatableRead — изменения других транзакций не видимы, но доступны при обновлении данных;
- ISerializable — транзакция выполняется изолированно от других транзакций;
- Ilisolated — транзакция выполняется изолированно от других транзакций.
Свойство
TXactAttribute = (xaCommitRetaining, xaAbortRetaining); property Attributes: TXactAttributes;
задает способ управления транзакциями при их фиксации и откате:
- xaCommitRetaining — после фиксации очередной транзакции автоматически начинается выполнение новой;
- xaAbortRetaining — после отката очередной транзакции автоматически начинается выполнение новой.
Транзакции
Управление транзакциями в OLE DB реализовано на двух уровнях. Во-первых, всеми необходимыми методами обладает объект сессии. Он имеет интерфейсы ITransaction, ITransactionJoin, ITransactionLocal, ITransactionObject.
Внутри сессии транзакция управляется интерфейсами ITransactionLocal, ItransactionSC, ITransaction и их методами StartTransaction, Commit, Rollback.
Во-вторых, для объекта сессии можно создать объект транзакции при помощи метода
function GetTransactionObject(ulTransactionLevel: UINT; out ppTransactionObject: ITransaction): HResult; stdcall;
интерфейса ITransactionObject, который возвращает ссылку на интерфейс объекта-транзакции.