Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.22;
Скачать: CL | DM;

Вниз

вопрос по использованию 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.01 c
3-70118
mihei
2003-04-30 11:56
2003.05.22
Помогите с DBgridEh+CheckBoxes


3-70167
Xeon
2003-05-02 08:55
2003.05.22
Файлы в базе данных


3-70132
Александр - Админ
2003-04-30 15:36
2003.05.22
Подскажите как достать даннаые из DataSource


3-70087
Yuraz
2003-04-29 08:42
2003.05.22
Как оргпнизовать добавление/удаление строки в приложении.


3-70143
Lion
2003-04-30 15:45
2003.05.22
FoxPro и Делфи !