Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

События Interbase


Juice ©   (2005-07-14 19:00:00) 

В базе есть весьма продолжительная ХП, настолько что на клиентской стороне я вызываю эту ХП из отдельного потока и отображаю на форме ПрогрессБар. Суть логики процедуры содержится в большой циклической выборке for select, и вот я решил перед этим циклом сначала просто узнать кол-во записей которые в него входят, послать сообщение с этим кол-вом, а затем после кажого suspend в теле цикла снова инициировать сообщение в котором передавать счетчик.  Таким образом приложение, подписавшееся на эти события должно получать реальный прогресс выполнения ХП. Вот тут у меня маленькая путаница. Во-первых, это все дествует в рамках транзакции или нет, т.е. будут ли другие подписаные  приложения получать уведомление о событии в моей транзакции ? Насколько я помню то да. Но если это так, то это легко решимо - передать ХП некий ID своего приложения и заставить добавлять в сообщение этот ID, таким образом паралельно-выполняемые клиенты будут при получении события сравнивать полученый от события ID со своим и отсеивать чужие. И второй вопрос. Прочитал, что реально события можно обработать только после комита транзакции, и не могу найти где я это прочитал :) Вот тут неразбериха, комита какой транзакции? Той, в контексте которой эти события генерируются или ... ?


Johnmen   (2005-07-15 11:11:00) [1]

А управляет транзакциями КЛИЕНТ.


Juice   (2005-07-15 10:52:00) [2]


> Той, в контексте которой эти события генерируются

В связи с этим хочу кое-чего спросить. Тут мне некогда говорили что в пределах ХП и тригеров нельзя комититься. Но я так и не понял смысла, ведь процедуры работают в рамках транзакций ?


Johnmen   (2005-07-15 09:44:00) [3]

Только придётся с определённой периодичностью делать b/r. Ведь нельзя бесконечно выполнять DDL запросы без b/r.


juice   (2005-07-14 21:23:00) [4]

Сэнкс, тоже вариант.


P.N.P.   (2005-07-14 19:56:00) [5]

>Той, в контексте которой эти события генерируются
В той.
А насчет счетчика - почему бы не воспользоваться генератором?
Если FB1.5 то:
Создать временный генератор перед выполнением процедуры, передавать
в процедуру имя этого генератора и в процедуре изменять его значение
execute statement 'select gen_id(generator,1) from rdb$database'
а на клиенте через опр. промежутки времени проверять генератор
select gen_id(generator,0) from rdb$database
После выполнения процедуры грохаем генератор и все.


Наверх

Титульная страница Поиск, карта сайта Написать письмо