Программирование на Delphi 7

       

Транзакции



Транзакции


Компонент 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, который возвращает ссылку на интерфейс объекта-транзакции.

Содержание раздела