Шаг 3. Режим AutoCommit. Работа в контексте двух транзакций для избежания DEADLOCK.

pFIBDataSet позволяет автоматически подтверждать сделанные изменения если задать свойство AutoCommit в True. Теперь после вызова метода Post, pFIBDataSet1 автоматически будет вызывать pFIBTransaction1.CommitRetaining, сохраняя сделанные пользователем изменения и не закрывая при этом сам запрос. Такой подход уже снижает вероятность Deadlock, который возможен при наличии длинных не закрытых транзакций, в контексте которых производились изменения данных.

Тем не менее, FIBPlus предлагает другую возможность, которая сводит вероятность возникновения Deadlock практически к нулю. TpFIBDataSet может работать одновременно в контексте двух транзакций. Одна длинная транзакция, в контексте которой данные только читаются, и другая короткая транзакция, в контексте которой выполняются все модифицирующие запросы.

Переименуем pFIBTransaction1 в ReadTransaction и добавим еще один компонент WriteTransaction. После этого зададим свойство UpdateTransaction у pFIBDataSet1 в WriteTransaction. Таким образом, теперь pFIBDataSet1 подключен сразу к двум компонентам TpFIBTransaction:

Рис. 13.

Теперь, после вызова метода Post, pFIBDataSet1 будет вызывать метод Commit у компонента WriteTransaction. Однако, учитывая, что данные читаются в контексте совсем другой транзакции (ReadTransaction) это не вызовет закрытия pFIBDataSet1. То есть, используя FIBPlus мы имеем настоящий режим AutoCommit, который уменьшает вероятность Deadlock и не мешает "видеть" нам актуальные значения всех записей. Вы наверняка знаете, что при использовании BDE в режиме AutoCommit вы не можете узнать реальные значения записей, пока не переоткроете запрос.

Загрузить полный рабочий код примера.


Описание для анонса: Третья часть статьи об особенностях работы с master-detail в FIBPlus. В этой части описано использование уникального механизма разделенных транзакций и режима AutoCommit.
Специальные цены для ex-USSR (кроме стран ЕС):

235 Euro
1500 руб. для физ. лиц
3600 руб. для юр. лиц

Скидки при покупке нескольких копий!

Навигация



В настоящее время FIBPlus используется мной в системе управления турнирами по спортивным бальным танцам. Дело серьёзное, официально аттестуемое. Программа работает в нескольких регионах РФ, и даже немного за рубежом. Учитывая, что такие турниры иногда собирают до 1000 танцевальных пар, и все результаты заносятся, обрабатываюся и выводятся в реальном времени на печать, в пресс-центр, судьям, на информационное табло, и т.д. очень важна устойчивость и стабильность.

Построив систему на Firebird/FIBPlus, я не прогадал. Более всего пользуюсь разделенными транзакциями, Conditions, FB Events, AutoUpdate SQL для AutoInc полей. Ну и конечно SQL Editor, куда ж без него... Много, много радости детишкам принесло... :)Удивляюсь каждый раз сообщениям об исправленных багах. Мне с ними за последние 5 лет так и не пришлось встретиться :-) Так держать.

>>

Владимир Крапоткин, г.Екатеринбург
Раздел для покупателей
Получение полных версий и обновлений. Перейти в Личный кабинет
Сайт по Delphi: ежедневные ИТ-новости, статьи, документация, компоненты, конкурсы, юмор...