Форум: "Базы";
Текущий архив: 2003.05.22;
Скачать: [xml.tar.bz2];
Внизвопрос по использованию pFIBTransaction в FIBPlus Найти похожие ветки
← →
KIR (2003-04-30 09:51) [0]Народ, нигде не могу найти инфу по следующему вопросу: для чего нужно свойство DefaultTransaction у компонента pFIBDataBase?
← →
Johnmen (2003-04-30 10:06) [1]Для указания транзакции по умолчанию...:)
← →
KIR (2003-04-30 11:30) [2]>Johnmen Молодэц тебе! :)
Немного поподробнее о моей ситуации: в принципе в проге вроде пока нет необходимости создавать ситуации, когда одна транзакция должна "видеть", что происходит внутри другой. Я подумал, почему бы не обойтись вообще одной транзакцией и бросил на форму один компонент pFIBTransaction и сделал ее DefaultTransaction для всей базы. Теперь получается, что все НД, ХП и Query выполняются в рамках этой транзакции.
Вот только один момент: допустим открыт НД (юзер его видит с помощью DBGrid"a). Затем происходит выполнение каких-то ХП (например вставка заголовка в мастер-талицу и наполнение детальной таблицы) все это происходит в блоке
TS.StartTransaction <-> TS.Commit.
Все нормально ХП выполнились без сбоев, но вот только поскольку произошел Commit, а у НД, который видит юзер та же транзакция, то он (НД) закрывается...
Народ, как это решается: толи в настройках транзакции надо что-то настроить, толи делать на все НД отдельную транзакцию, на ХП отдельную, на Query одтельную?
← →
Johnmen (2003-04-30 11:34) [3]Решается стандартно :
Заводится две (2) транзакции - одно для чтения, другая (как можно более короткая), для записи.
← →
koks (2003-04-30 12:09) [4]Вообще хороший "тон" - для каждого набора данных создавать отдельную транзакцию и управляеть ей ручками... т.е. перед открытием стартовать а после закрытия подтверждать.. при ошибке соответственно откат... а DefaultTransaction можно вообще оставить пустым...
Насколько я понял изо всех доков лучше много коротких транзакций чем меньше но длинных... Это увеличивает надежность, снижает риск deadlock. Но это общее правило. FIBPlus пошел еще дальше - он предлагает "живой" датасет использовать в рамках не одной а двух транзакций - одна титающая и одна обновляющая чтобы сделать каждую из них еще короче....
← →
Johnmen (2003-04-30 12:16) [5]>для каждого набора данных создавать отдельную транзакцию и управляеть ей ручками
Не создавать. А стартовать. :)
← →
koks (2003-04-30 12:20) [6]ну вот только не надо придираться к словам...
← →
Johnmen (2003-04-30 12:31) [7]Это не придирка, а попытка призвать к смысловой точности в выражениях...:)
← →
MsGuns (2003-04-30 12:34) [8]>KIR © (30.04.03 09:51)
Возможно, будут топоптать ногами, но все же..
Если нет опыта (как у меня, к примеру), лучше итти от простого к сложному. Т.е. у меня ВСЕ ДЕЙСТВИЯ С БД выполняются в рамках одной транзакции. Если прогр.блок пишет в БД, то в конце всех шагов (может быть множество послед.запросов к разным таблам) ставлю транзакции CommitRetaining, если хоть один шаг не завершен (в защищенном блоке) нормально, то RollBackRetaining.
В первом случае (т.е.когда изменерия прошли успешно) переоткрываю все активные (т.е.у меня видимые в активных контролах) датасеты с позиционированием на предв. запомненную запись (использую для отображения только TIBQuery с параметрами или связанные). В результате все изменения (а у меня есть места, где меняются данные в 8 таблицах за раз) тут же видны во всех гридах, включая итоги.
Знаю, что это деревянно, но зато очень хорошо исследуется (ИМХО)механизм работы. Тем более, что в TIBDataSet или в том же FIBPlus`е наверняка внутри выполняется вся эта кухня. Загромождается код ? Безусловно ! Нагрузка на клиента ? Алгоритмически - да ! Зато след.проги будут писаться уже бОлее оптимально, а главное, с ПОНИМАНИЕМ. Переход на ХП, "разруливание" инф.потоков (для этого и служит многотранзакционность) - это все от нас никуда не уйдет !
Одеваю кожаные трусы ;)))
← →
koks (2003-04-30 12:36) [9]ну....... за смысловую точность !! :))
← →
Johnmen (2003-04-30 12:41) [10]>koks © (30.04.03 12:36)
наливай ! :)
← →
koks (2003-04-30 12:42) [11]снимай трусы,
все равно со временем ты перейдешь на то о чем я написал...
← →
MsGuns (2003-04-30 12:51) [12]>koks © (30.04.03 12:42)
>снимай трусы,
С какой такой радости ?
Читаем внимательно:
>MsGuns © (30.04.03 12:34)
> Переход на ХП, "разруливание" инф.потоков (для этого и служит многотранзакционность) - это все от нас никуда не уйдет !
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.05.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c