И ОПЯТЬ ТРАНЗАКЦИИ (в компонентах FibPlus)!
Модератор: kdv
И ОПЯТЬ ТРАНЗАКЦИИ (в компонентах FibPlus)!
Уже писал по этому поводу!
Практический пример, хочу практ. ответа.
10 датасетов FibPlus, формируют сетки справочников, сетки рабочих данных, отчеты. Находятся в ДатаМодуле.
У всех датасетов автокоммит. Справочные датасеты не имеют автокоммита, после выхода из них просиходит коммит всего сделанного.
----
Проблема
При открытой рабочей таблицы (все датасеты привязаны к 2 компонентам TpFIBTransaction - одна пишет, другая читает) открывается справочник, рабоается и закрывается. ВСЕ!!! Оба грида отображаются пустоты - запросы закрыты - естественная ситуация при коммите транзакции.
Попробовал делать CommitRetainng, лучше, но ....далее
----
Вопрос!
Сколько надо TpFIBTransaction на 10 рекордсетов, с учетом, что у каждого рекордсета есть Read и Update транзакции свойства.[/b]
Практический пример, хочу практ. ответа.
10 датасетов FibPlus, формируют сетки справочников, сетки рабочих данных, отчеты. Находятся в ДатаМодуле.
У всех датасетов автокоммит. Справочные датасеты не имеют автокоммита, после выхода из них просиходит коммит всего сделанного.
----
Проблема
При открытой рабочей таблицы (все датасеты привязаны к 2 компонентам TpFIBTransaction - одна пишет, другая читает) открывается справочник, рабоается и закрывается. ВСЕ!!! Оба грида отображаются пустоты - запросы закрыты - естественная ситуация при коммите транзакции.
Попробовал делать CommitRetainng, лучше, но ....далее
----
Вопрос!
Сколько надо TpFIBTransaction на 10 рекордсетов, с учетом, что у каждого рекордсета есть Read и Update транзакции свойства.[/b]
И на отчеты одна транз. и на гриды тоже с одними настройками:?Lars писал(а):Но рекордсеты могут быть параллельно открыты и послежовательно закрываться! Дулаю коммит и все....CyberMax писал(а):TpFIBDataSet.Transaction - читающая тразнакция (одна на всех).
TpFIBDataSet.UpdateTransaction - пишущая транзакция (одна на всех).
read
read_committed
nowait
rec_version
Делать коммит для читающей вообще не стоит?! У меня было такое мышление - поработал с данными, закрыл рекордсет и коммит поставил для читающей и если UpdateTransaction.InTransaction то и закоммиитить обновляющую.AlexandrS писал(а):Tсли вы делаете Commit именно пишущей транзакции, то в обще не понятно как у вас получается пустой dataset как буд-то ему закрыли читающую
А как поступать? закрывать рекордсет и оставлять транзакцию открытой?
Голубчик. Ну погоди ты сепетить ручками-то, подумай о том, что ты, собсно, делаешь, прежде чем вертеть то так то эдак. Транзакция - это что? Некоторый контекст, в котором выполняются операторы. Если говорить о модифицирующих - которые должны быть валидны только все вместе. Следственно, пока жива транзакция, выполненных в её контексте изменений ни для кого нет, кроме ней самой. Потому и нужно, чтоб они стали существовать для остальных, сделать ей коммит. Той, в которой пишем. Компрене ву? А читающая, если она read_commited, имеет право видеть изменения которые кто угодно закоммитил. На хрена её-то коммитить?
Смотрю, что здесь прямо принято всех отсылать читать сайт про транзакции. Читал, вопросы возникают. И вопрос практического характера. По книге Борри на каждый запрос нужная транзакция, вопрос был в добавлении одного комп.транз на комп. рекордсета.Merlin писал(а):Уйди с глаз долой. На сайт, про транзакции читать. И про уровни изоляции. Потом приходи если чего непонятно.
Мда. "nowait" не нужен. Читаем http://www.ibase.ru/devinfo/ibx.htm, раздел TIBTransaction.Lars писал(а):read
read_committed
nowait
rec_version
Для отчетов такой режим не подходит. Для этого есть snapshot. Об этом тоже где-то в документациях написано.
Малость излишне категорично. Отчёты разные бывают. Не все же по горячим данным. И для аналитики редко нужна миллиметровая точность. А снапшот таки мусор держит, а отчёты затяжные случаюццо... Такшта всё по месту.CyberMax писал(а):Для отчетов такой режим не подходит. Для этого есть snapshot. Об этом тоже где-то в документациях написано.Lars писал(а):read
read_committed
nowait
rec_version