Все о Delphi

..:

 

Транзакции

Подобно своим аналогам в BDE и ADO компонент TSQLConnection поддерживает механизм транзакций и делает это сходным образом.

Начало, фиксацию и откат транзакции выполняют методы

procedure StartTransaction(TransDesc: TTransactionDesc);

 procedure Commit(TransDesc: TTransactionDesc); 

procedure Rollback(TransDesc: TTransactionDesc);

При этом запись TTransactionDesc возвращает параметры транзакции:

TTransIsolationLevel = (xilDIRTYREAD, xilREADCOMMITTED, xilREPEATABLEREAD, xilCUSTOM);

TTransactionDesc = packed record

TransactionID : LongWord;

GloballD : LongWord;

IsolationLevel : TTransIsolationLevel;

Customlsolation : LongWord;

end;

Запись содержит уникальный в рамках соединения идентификатор транзакции TransactionID И уровень изоляции Транзакции IsolationLevel. При уровне изоляции xilCustom определяется параметр Customlsolation. Идентификатор GiobaliD используется при работе с сервером Oracle.

Некоторые серверы БД не поддерживают транзакции, и для определения этого факта используется свойство

property TransactionsSupported: LongBool;

Если соединение уже находится в транзакции, свойству

property InTransaction: Boolean;

присваивается значение True. Поэтому, если сервер не поддерживает множественные транзакции, всегда полезно убедиться, что соединение не обслуживает начатую транзакцию:

var Translnfo: TTransactionDesc;

(...)

if Not MyConnection.InTransaction then

try

MyConnection.StartTransaction(Translnfo); {...}

MyConnection.Commit(Translnfo);

 except

MyConnection.Rollback(Translnfo); 

end;


. . : Team