Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-70239
FOZi
2003-05-12 01:45
2003.05.22
Заголовок в таскбаре Application.Title?


11-70193
Alexei Dragoner
2002-08-07 12:22
2003.05.22
Вот и Delphi 7.... Какие планы?


14-70460
Xeon
2003-05-02 07:51
2003.05.22
Компиляция?


3-70093
Michel
2003-05-04 15:23
2003.05.22
Как преобразовать БД одной системы в другую


14-70518
Dimka Maslov
2003-05-04 19:44
2003.05.22
Занимательная арифметика





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский