Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];

Вниз

Firebird Transactions   Найти похожие ветки 

 
negrila   (2004-06-27 19:13) [0]

Использую Firebird и IBDataSet, не понимаю, когда запускать и когда подтверждать транзакцию. Делаю при показе модальной формы с DBGrid IBTransaction.Active := true и IBTranasactioin.StartTransaction, IBDataSet1.Active := true , все работает и показывается, а вот когда делать IBTransaction.Commit? По закрытию формы? А если человек на два часа оставит окно открытым и уйдет? Не понимаю.


 
Johnmen ©   (2004-06-27 19:39) [1]

Читающую тр-ию можешь оставлять активной сколь угодно долго.
А вот пишущая д.б. как можно короче...


 
jack128 ©   (2004-06-27 19:46) [2]


> IBTransaction.Active := true и IBTranasactioin.StartTransaction
это одно и тоже

> IBDataSet1.Active := true ,
тут происходит не явное открытие транзакции. Но ИМХО отучать себя от такого стиля нужно.


> а вот когда делать IBTransaction.Commit? По закрытию формы?
> А если человек на два часа оставит окно открытым и уйдет?
>
можно закрыть по СommitRetaining, тогда курсор останется открытыл. А можно и оставить транзакцию на пару часов открытой - в IB чтение не блокурует пишущие транзакции. Лудше всего читать в одной IbTransaction, писать в другой, причем читающая должна иметь параметры read read_commited nowait - такая транзакция - самая ненапряжная для сервера.


 
Petr V. Abramov ©   (2004-06-27 20:07) [3]

> А если человек на два часа оставит окно открытым и уйдет?
 Если оставит транзакцию, которая не держит блокировок, пусть ходит сколько хочет. Отсюда вывод - блокирующие транзакции надо закрывать как можно быстрее.
 В 10% случаев это невозможно, тогда лечится только администртивными мерами.


 
negrila   (2004-06-28 00:54) [4]

IBDataSet1.Active := true ,
тут происходит не явное открытие транзакции. Но ИМХО отучать себя от такого стиля нужно.

А как делать правильно? И еще вдогонку вопрос: для каждого датасета свою IBTransaction держать? Или можно одной обойтись


 
DrPass ©   (2004-06-28 01:01) [5]


> для каждого датасета свою IBTransaction держать? Или можно
> одной обойтись

Нет, конечно. Зависит от логики программы - если требуется независимая работа с несколькими источниками данных, ты делаешь ее в разных транзакциях. Если не требуется, можно и одной обойтись.


 
jack128 ©   (2004-06-28 01:28) [6]

в принципе - если следовать логике - чтение в одной транзакции, запись в другой - то на всю программу может хватить всего ДВУХ компонентов IBTransaction, при этом приложение может быть очень навороченным.
Лично я на чтение использую одну транцакцию на приложение, а на запись на каждый DataModule/Форму - свою транзакцию.

> IBDataSet1.Active := true ,
> тут происходит не явное открытие транзакции. Но ИМХО отучать
> себя от такого стиля нужно.
>
> А как делать правильно?

ПРАВИЛЬНО и так и так. Но лично я предпочитаю явно открывать транзакцию. Такое вот у меня ИМХО ;-)

if not IbTrans.InTransaction then
 IbTrans.StartTransaction;
try
 MyDataSet.Open;
....
 MyDataSet.Close;
 IbTrans.Commit
except
 IbTrans.Rollback;
end;



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.034 c
14-1088229142
Sanek_metaller
2004-06-26 09:52
2004.07.18
Как поиграть в WarCraft3 FT по модему?


1-1089000676
newver
2004-07-05 08:11
2004.07.18
Передача данных в программу.


14-1087567928
Rouse_
2004-06-18 18:12
2004.07.18
Интервью с Супримом :)


6-1084950121
Sergo
2004-05-19 11:02
2004.07.18
Почтовик


1-1088736123
qwerg
2004-07-02 06:42
2004.07.18
Скины





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский