Справочное руководство по TDMS 7.0 API
IsActiveTransaction Свойство
Смотри также  Отправить замечание
TDMSApplication Объект : IsActiveTransaction Свойство

Glossary Item Box

Описание

Флаг "Открытая транзакция".

Тип свойства

Read-only свойство

Опеделение

Visual Basic
Public Property IsActiveTransaction As Boolean

Тип возврата

TRUE - в настоящий момент есть незавершенная транзакция.

Заметки

Транзакция - последовательность взаимосвязанных действий, рассматриваемых как единое целое. Другими словами, при открытии транзакции предполагается, что последующие действия должы быть либо выполнены все, либо не выполнено ни одно. Таким образом с помощью механизма транзакций обеспечивается логическая целостность данных в БД.

Для открытия и нормального завершения используются методы StartTransaction МетодCommitTransaction Метод. В случае сбоя во время выполнения операции нормальное закрытие не будет произведено, и транзакция останется открытой (в том числе в случае аварийного завершения работы приложения) - по этой причине рекомендуется использовать механизм транзакций с большой осторожностью. В данной ситуации необходимо произвести перехват и обработку исключения (обработать событие OnScriptError Событие). Для закрытия транзакции в случае сбоя используются свойство IsActiveTransaction Свойство  и метод AbortTransaction Метод, выполняющий откат произведенной операции.

Например, требуется произвести логически взаимосвязанные изменения в 10 объектах (изменить значение некоторого атрибута или сменить статус), причем это изменение должно быть выполнено либо для всех десяти объектов, либо не выполнено совсем:

'=================================================
Sub ChangeStatus(ObjCollection, NewStatusName)

    'Открытие транзакции
     ThisApplication.StartTransaction

    'Блок каскадных изменений    
     For Each obj In ObjCollection

           Obj.Permissions = SysAdminPermissions

           For Each child In obj.ContentAll

                'Если закомментировать след. строку кода, скорее всего это вызовет ошибку -
                ' у рядового пользователя могут отсутствовать права на смену статуса.
                ' Тогда "сработает" перехвать ошибки в OnScriptError, и произведенные
                ' изменения будут отменены
                child.Permissions = SysAdminPermissions

                child.StatusName = NewStatusName
           Next      

           Obj.StatusName = NewStatusName
     Next      

    'Нормальное завершение транзакции
    ThisApplication.CommitTransaction 
End Sub

'=================================================
'Если где-то произошла ошибка, перехватываем ее
 Sub OnScriptError(ScriptDescription, Object, Line, Char, ErrorDescription, Cancel)

    'Если на момент ошибки транзакция была открыта, откатываем 
    If ThisApplication.IsActiveTransaction Then ThisApplication.AbortTransaction
End Sub
'=================================================

Таким образом, если произошел сбой операции смены статуса (например, нет прав на смену статуса и т.п.), выполнится откат и все объекты вернутся к первоначальному состоянию.

Метод доступен для вызова всем пользователям TDMS.

Смотри также

© 2023 CSoft Development. Все права защищены.