Достаточна ли для всех датасетов два транзакции Isolation = ReadCommited другой Snapshotом?

Обсуждение возникших проблем, предложений и ошибок IBDAC компонентов
Ответить
mrUlugbek
Сообщения: 6
Зарегистрирован: Чт 17 ноя 2011 05:50

Достаточна ли для всех датасетов два транзакции Isolation = ReadCommited другой Snapshotом?

Сообщение mrUlugbek » Ср 20 янв 2016 08:41

Привет всем
Хотел спросить как правильно работать в режиме CacheUpdate хочу конролировать транзакцию..
У меня Ibquery датасеты 20 штук достаточна ли для всех два транзакции Isolation один с ReadCommited другой Snapshotом?
Или для всех создать отдельно?

Правильно ли я делаю?

IbConnection.AutoCommit=False
IbConnection.connection connected false
IbReadTransaction AutoCommit=False
IbReadTransaction Activ=False
IbWriteTransaction Activ=False

При запуске программы делаю так
IbConnection.connected= true
IbReadTransaction.active=true
Все датасеты cacheupdate true у всех есть отдельно для записи WriteTransaction1....4
Dataset1.open
Dataset2.open
Dataset3.open
Dataset4.open

Сохранение Записи
Try
WriteTransaction1.startransaction
Dataset1.post
Dataset1.Applyupdate();
Dataset1.commitretaining
WriteTransaction1.commit
except
Dataset1.cancel;
WriteTransaction1.rollback
end

ViktorV
Devart Team
Сообщения: 206
Зарегистрирован: Чт 31 июл 2014 09:52

Re: Достаточна ли для всех датасетов два транзакции Isolation = ReadCommited другой Snapshotом?

Сообщение ViktorV » Ср 20 янв 2016 10:42

Да, вы можете использовать для всех датасетов указанные вами 2 транзакции. Тогда в вашем примере вы можете для всех датасетов установить единую пишущую транцакцию ibWriteTransaction вместо (WriteTransaction1....4), и соответственно вызывать ibWriteTransaction.Commit и ibWriteTransaction.Rollback.

mrUlugbek
Сообщения: 6
Зарегистрирован: Чт 17 ноя 2011 05:50

Re: Достаточна ли для всех датасетов два транзакции Isolation = ReadCommited другой Snapshotом?

Сообщение mrUlugbek » Ср 20 янв 2016 12:03

Спасибо за ответ
Мне надо у всех датасетов поставит Options.PrepareUpdateSQL=False что бы не препаривать запросы пишущей транзакции? ИЛи не надо..
Можете один маленкий примерчик сделать
Ручной контролировать транзакции с откатами и ошибками?
Dataset.Cancel
Dataset.CancelUpdates
showmessage Error итд

ViktorV
Devart Team
Сообщения: 206
Зарегистрирован: Чт 31 июл 2014 09:52

Re: Достаточна ли для всех датасетов два транзакции Isolation = ReadCommited другой Snapshotом?

Сообщение ViktorV » Ср 20 янв 2016 13:55

Если TIBCQuery.Options.PrepareUpdateSQL установлен в False, IBDAC выполняет следующие шаги:
- вызывает prepare модифицирующего запроса (insert, update, delete);
- выполняет запрос на сервере;
- выполняет commit запроса;
- вызывает unprepare запроса.
Если же TIBCQuery.Options.PrepareUpdateSQL установлен в True, IBDAC выполняет следующие шаги:
- вызывает prepare модифицирующего запроса (insert, update, delete);
- выполняет запрос на сервере;
- выполняет commitretaining запроса.
Свойство TIBCDataSetOptions.PrepareUpdateSQL по-умолчанию установлено в False для улучшения производительности.
Вы можете использовать наш IBDAC демо проект, где на вкладке 'General Demos\' показано как работать в режиме CacheUpdates с отдельной пишущей транзакцией. Этот проект может вы сможете найти в папке 'Demos\IbDACDemo' каталога установки демо-проектов IBDAC.

Ответить