Хотя этот вопрос уже поднимался,
остались моменты, которые я не совсем понимаю.
Как правильно работать с транзакциями в IBX?
На сегодняшний момент я делаю так
1)
Код: Выделить всё
StartTransaction
try
<изменения>
Commit;
except
RollBack;
raise;
end;
Dimitry Sibiryakov в http://forum.ibase.ru/phpBB2/viewtopic.php?t=1444
Однако в топике http://forum.ibase.ru/phpBB2/viewtopic.php?t=396
рекомендовался несколько другой подход
2)
Код: Выделить всё
StartTransaction
try
<изменения>
finally
Commit;
end;
если изменение одно и потерпело неудачу, то все равно Rollback
переведет транзакцию в подтвержденное состояние)
или
3)
Код: Выделить всё
StartTransaction
try
<изменения>
except
Rollback;
raise;
end;
Commit;
Если рассматривать общий случай (изменения могут затрагивать несколько
записей) и не учитывать вариант обрыва соединения (который
IBX не может обработать корректно), какой из способов предпочтительнее - 1 или 3?
Т.е. вопрос сводится к тому, в каких случаях Commit навернется,
но соединение с сервером останется? Merlin упоминал о DDL-statements,
но может существуют и другие случаи?