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

Вниз

События Interbase   Найти похожие ветки 

 
Juice ©   (2005-07-14 19:00) [0]

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


 
P.N.P. ©   (2005-07-14 19:56) [1]

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


 
juice ©   (2005-07-14 21:23) [2]

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


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

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


 
Juice ©   (2005-07-15 10:52) [4]


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

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


 
Johnmen ©   (2005-07-15 11:11) [5]

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



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

Текущий архив: 2005.08.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
1-1123600501
_Андрей
2005-08-09 19:15
2005.08.28
Создание формы в потоке, функция которого находится в DLL


3-1121341257
vigo
2005-07-14 15:40
2005.08.28
Подключение к Oracle и выборке данных...


9-1115369239
Slavikk
2005-05-06 12:47
2005.08.28
Lod в GLScene


1-1123194602
yurique
2005-08-05 02:30
2005.08.28
CustomItemDraw в TListView


5-1095141902
Lera
2004-09-14 10:05
2005.08.28
Инсталяция компоненты.