Страница 1 из 2
И ОПЯТЬ ТРАНЗАКЦИИ (в компонентах FibPlus)!
Добавлено: 24 июл 2006, 07:13
Lars
Уже писал по этому поводу!
Практический пример, хочу практ. ответа.
10 датасетов FibPlus, формируют сетки справочников, сетки рабочих данных, отчеты. Находятся в ДатаМодуле.
У всех датасетов автокоммит. Справочные датасеты не имеют автокоммита, после выхода из них просиходит коммит всего сделанного.
----
Проблема
При открытой рабочей таблицы (все датасеты привязаны к 2 компонентам TpFIBTransaction - одна пишет, другая читает) открывается справочник, рабоается и закрывается. ВСЕ!!! Оба грида отображаются пустоты - запросы закрыты - естественная ситуация при коммите транзакции.
Попробовал делать CommitRetainng, лучше, но ....далее
----
Вопрос!
Сколько надо TpFIBTransaction на 10 рекордсетов, с учетом, что у каждого рекордсета есть Read и Update транзакции свойства.[/b]
Добавлено: 24 июл 2006, 14:43
CyberMax
TpFIBDataSet.Transaction - читающая тразнакция (одна на всех).
TpFIBDataSet.UpdateTransaction - пишущая транзакция (одна на всех).
Добавлено: 25 июл 2006, 17:41
Lars
AlexandrS писал(а):Транзакции требуется две. Из того, что вы написали лично у меня возникает вопрос. А какой транзакции после ввода в справочник вы делаете commit?
UpdateTransaction
Добавлено: 25 июл 2006, 17:43
Lars
CyberMax писал(а):TpFIBDataSet.Transaction - читающая тразнакция (одна на всех).
TpFIBDataSet.UpdateTransaction - пишущая транзакция (одна на всех).
Но рекордсеты могут быть параллельно открыты и послежовательно закрываться! Дулаю коммит и все....
Добавлено: 25 июл 2006, 18:48
Lars
Lars писал(а):CyberMax писал(а):TpFIBDataSet.Transaction - читающая тразнакция (одна на всех).
TpFIBDataSet.UpdateTransaction - пишущая транзакция (одна на всех).
Но рекордсеты могут быть параллельно открыты и послежовательно закрываться! Дулаю коммит и все....
И на отчеты одна транз. и на гриды тоже с одними настройками:?
read
read_committed
nowait
rec_version
Добавлено: 25 июл 2006, 18:56
Lars
AlexandrS писал(а):Tсли вы делаете Commit именно пишущей транзакции, то в обще не понятно как у вас получается пустой dataset как буд-то ему закрыли читающую
Делать коммит для читающей вообще не стоит?! У меня было такое мышление - поработал с данными, закрыл рекордсет и коммит поставил для читающей и если UpdateTransaction.InTransaction то и закоммиитить обновляющую.
А как поступать? закрывать рекордсет и оставлять транзакцию открытой?
Добавлено: 25 июл 2006, 19:14
Merlin
Голубчик. Ну погоди ты сепетить ручками-то, подумай о том, что ты, собсно, делаешь, прежде чем вертеть то так то эдак. Транзакция - это что? Некоторый контекст, в котором выполняются операторы. Если говорить о модифицирующих - которые должны быть валидны только все вместе. Следственно, пока жива транзакция, выполненных в её контексте изменений ни для кого нет, кроме ней самой. Потому и нужно, чтоб они стали существовать для остальных, сделать ей коммит. Той, в которой пишем. Компрене ву? А читающая, если она read_commited, имеет право видеть изменения которые кто угодно закоммитил. На хрена её-то коммитить?
Добавлено: 25 июл 2006, 19:14
Lars
AlexandrS писал(а):
Все, что вы бобавляете будет отображаться в dataset, не трогайте в обще читающую оперируйте только с пишущей
Понятно.
А в каком случае нужно делать коммит читающей транзакции? А обновления, появившиеся после старта чит. транз?
Добавлено: 25 июл 2006, 19:16
Merlin
Уйди с глаз долой. На сайт, про транзакции читать. И про уровни изоляции. Потом приходи если чего непонятно.
Добавлено: 25 июл 2006, 19:18
Lars
Merlin писал(а):На хрена её-то коммитить?
Приложение отработало и осталась транзакция... ощущение, что чего-то не хватает...
Ну а как одна транзакция (компонет) может обслуживать несколько рекордсетов?
Добавлено: 25 июл 2006, 19:28
Merlin
Lars писал(а): ощущение, что чего-то не хватает...
Ты уж прости меня грешного, но у меня тоже такое ощущение
Lars писал(а):
Ну а как одна транзакция (компонет) может обслуживать несколько рекордсетов?
Молча

Добавлено: 25 июл 2006, 19:49
Lars
Merlin писал(а):Уйди с глаз долой. На сайт, про транзакции читать. И про уровни изоляции. Потом приходи если чего непонятно.
Смотрю, что здесь прямо принято всех отсылать читать сайт про транзакции. Читал, вопросы возникают. И вопрос практического характера. По книге Борри на каждый запрос нужная транзакция, вопрос был в добавлении одного комп.транз на комп. рекордсета.
Добавлено: 26 июл 2006, 11:40
CyberMax
Lars писал(а):read
read_committed
nowait
rec_version
Мда. "nowait" не нужен. Читаем
http://www.ibase.ru/devinfo/ibx.htm, раздел TIBTransaction.
Для отчетов такой режим
не подходит. Для этого есть snapshot. Об этом тоже где-то в документациях написано.
Добавлено: 26 июл 2006, 11:49
dimitr
CyberMax писал(а):Мда. "nowait" не нужен. Для отчетов такой режим не подходит.
я бы сказал, что отчету должно быть глубоко пофиг на [no]wait. Откуда в нем конфликты?
Добавлено: 26 июл 2006, 12:41
CyberMax
2 dimitr. Эти два предложения совсем про разное.
Я имел ввиду, что:
1. Для данных параметров транзакции, параметр wait/nowait не играет роли, поэтому указывать его не надо.
2. Под словом режим я подразумевал не wait/nowait, а snapshot/readonly-режим.
Добавлено: 26 июл 2006, 13:31
Merlin
CyberMax писал(а):Lars писал(а):read
read_committed
nowait
rec_version
Для отчетов такой режим
не подходит. Для этого есть snapshot. Об этом тоже где-то в документациях написано.
Малость излишне категорично. Отчёты разные бывают. Не все же по горячим данным. И для аналитики редко нужна миллиметровая точность. А снапшот таки мусор держит, а отчёты затяжные случаюццо... Такшта всё по месту.