M Y D E L P H I 7 . R U Самоучитель программирования  
 
  • Главная
  •  

     

    Транзакции

    Подобно своим аналогам в 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;