Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как организовать откат транзакции? [D6, IB6.x]


Страницы:   1 2

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ю
Некоторые кривые компоненты доступа позволяют не иметь явной транзакции, а создают ее сами, а вот как найти такую транзакию, надо смотреть у компонентов.

Правильные компоненты позволяют работать с несколькими транзакциями одновременно, и явно ими управляя.

Но в любом случае транзакции есть.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо