![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как организовать откат транзакции? [D6, IB6.x]
YK © (2005-02-01 07:05:00)Уважаемые Мастера!
Подскажите пожалуйста, как
организовать откат транзакции для InterBase.
Нужно ли создавать транзакцию на сервере?
через Transaction.Rollback не работает:(
Sergey_Masloff (2005-02-01 10:29:00) [21]Johnmen © (01.02.05 10:26) [11]
>А то можно привести пример, где вообще не нужны пишущие...
и читающие ;-)
Johnmen (2005-02-01 10:26:00) [22]Sergey_Masloff (01.02.05 10:20) [10]
Не, ну не надо углубляться в частные случаи. А то можно привести пример, где вообще не нужны пишущие...
Sergey_Masloff (2005-02-01 10:20:00) [23]Johnmen © (01.02.05 09:53) [9]
>Основания ?
Усложнение кода без действительной на то необходимости. Чреватое ошибками коих я наблюдал немало ;-)
>Какие ?
Привычка не думая применять одну и ту же методологию. Очень большая проблема. А потом в пакетных операциях начинают каждую вставку коммитить. Не видал такого? ;-) А что-транзакция должна быть максимально короткой!
Johnmen (2005-02-01 09:53:00) [24]>Sergey_Masloff (01.02.05 09:38) [7]
>Это совершенно не общее правило.
Основания ?
>Более того, слепое следование этому правилу может создавать проблемы.
Какие ?
HSolo (2005-02-01 09:46:00) [25]Sergey_Masloff (01.02.05 09:38) [7]
Да, каюсь, "общее правило" - термин неудачный.
Sergey_Masloff (2005-02-01 09:38:00) [26]HSolo © (01.02.05 09:09) [6]
Это совершенно не общее правило. Более того, слепое следование этому правилу может создавать проблемы. Хотя действительно во многих случаях такая схема работает отлично.
HSolo (2005-02-01 09:09:00) [27]Общее правило таково: "обновляющая" транзакция должна быть как можно короче. Т.е. чаще всего работают так: для чтения - одна транзакция read_commited; если надо что-то обновить - стартуем другую транзакцию, в ней обновляем и сразу ее commit, после чего перечитываем то, что надо перечитать, в 1-й транзакции.
HSolo (2005-02-01 09:01:00) [28]>значит в приложении следует
накапливать транзакции,
а затем всё commit?
Зачем же так резко :) Как минимум, при такой работе все изменения, сделанные пользователем, никто другой не увидит аж до самого "все коммит" (ибо dirty read в IB нету), плюс будет у Вас море deadlock-ов... в общем, http://ibase.ru/devinfo/ibtrans.htm
YK (2005-02-01 08:17:00) [29]Ясно,
значит в приложении следует
накапливать транзакции,
а затем всё commit?
Александр Иванов (2005-02-01 08:14:00) [30]Коммит фиксирует транзакцию и речь после этого можент идти только об откате базы, не знаю как это реализовано в ИБ.
YK (2005-02-01 08:09:00) [31]Я пишу Transaction.StartTransaction...
Может это из-за того что я делаю Transaction.commit?
После этого можно откатить транзакцию?
Alexandr (2005-02-01 07:08:00) [32]чтобы сработал Transaction.Rollback
надо сначала писать Transaction.StartTransactionю
Некоторые кривые компоненты доступа позволяют не иметь явной транзакции, а создают ее сами, а вот как найти такую транзакию, надо смотреть у компонентов.
Правильные компоненты позволяют работать с несколькими транзакциями одновременно, и явно ими управляя.
Но в любом случае транзакции есть.