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

Glossary Item Box

Описание

Завершает транзакцию.

Опеделение

Visual Basic
Public Sub CommitTransaction() 

Заметки

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

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

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

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

Пример

Если требуется произвести логически взаимосвязанные изменения в 10 объектах (изменить значение некоторого атрибута или сменить статус), причем это изменение должно быть выполнено либо для всех десяти объектов, либо не выполнено совсем:
Пример работы с транзакцией (VBScript)Скопировать код
'=================================================
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
'=================================================

Смотри также

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