TRANSACTION — различия между версиями

Материал из GB wiki
Перейти к: навигация, поиск
м (переименовал «Transaction» в «TRANSACTION»)
Строка 1: Строка 1:
 
{{Функция ГБ
 
{{Функция ГБ
 
|Название=TRANSACTION
 
|Название=TRANSACTION
|Описание=Все аргументы данной функции будут вычислены в одной транзакции. Если во время вычисления возникнет любая ошибка, вся транзакция откатится.
+
|Описание=Все аргументы данной функции будут вычислены в одной транзакции. Если во время вычисления возникнет любая ошибка, вся транзакция откатится.<br/><br/>Внутри транзакции фрагменты кода можно заключать в Try..Except. В этом случае, если внутри блока Try возникнет исключение, то оно будет обработано блоком Except и транзакция не откатится.<br/>Но если в блоке Try заключён вызов какой-то процедуры, который закончился ошибкой, то транзакция откатится в любом случае, т.е. несмотря на Try..Except (см. пример)
 
|Аргументы=
 
|Аргументы=
 
{{Аргумент
 
{{Аргумент
 
  |Название=аргументы
 
  |Название=аргументы
  |Пояснение=любые выражения, записанные по правилам [[:Category:Язык_ГБ|языка ГБ]]
+
  |Пояснение=выражение, записанное по правилам [[:Category:Язык_ГБ|языка ГБ]]
 
}}
 
}}
 
|Синтаксис=TRANSACTION ('''аргументы''')
 
|Синтаксис=TRANSACTION ('''аргументы''')
 +
|Пример=
 +
В данном примере '''транзакция не откатится''', т.к. ошибка возникает в блоке Try и не связана с работой процедур:
 +
Transaction(
 +
  Processcommand(11,...),
 +
  Try(
 +
    Exception(`BAG`),
 +
    Except(:Err:=1)
 +
  )
 +
)<br/>
 +
В данном примере, несмотря на блок Try, '''транзакция откатится''', если вызов процедуры закончится ошибкой (т.к. ошибки при работе процедур всегда откатывают транзакцию):
 +
Transaction(
 +
  Processcommand(11,...),
 +
  Try(
 +
    OpenDataSet(...),
 +
    Except(:Err:=1)
 +
  )
 +
)
 
}}
 
}}
 
[[Category:Функции_ГБ]]
 
[[Category:Функции_ГБ]]

Версия 11:06, 9 июня 2020

Все аргументы данной функции будут вычислены в одной транзакции. Если во время вычисления возникнет любая ошибка, вся транзакция откатится.

Внутри транзакции фрагменты кода можно заключать в Try..Except. В этом случае, если внутри блока Try возникнет исключение, то оно будет обработано блоком Except и транзакция не откатится.
Но если в блоке Try заключён вызов какой-то процедуры, который закончился ошибкой, то транзакция откатится в любом случае, т.е. несмотря на Try..Except (см. пример)

Синтаксис

TRANSACTION (аргументы)

Аргументы

аргументы
выражение, записанное по правилам языка ГБ

Тип результата

Нет

Примеры

В данном примере транзакция не откатится, т.к. ошибка возникает в блоке Try и не связана с работой процедур:

Transaction(
 Processcommand(11,...),
 Try(
   Exception(`BAG`),
   Except(:Err:=1)
 )
)

В данном примере, несмотря на блок Try, транзакция откатится, если вызов процедуры закончится ошибкой (т.к. ошибки при работе процедур всегда откатывают транзакцию):

Transaction(
 Processcommand(11,...),
 Try(
   OpenDataSet(...),
   Except(:Err:=1)
 )
)