Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.022 c
14-1123066982
Kerk
2005-08-03 15:03
2005.08.28
Где можно IRC-бота захостить?


3-1121605921
Jet
2005-07-17 17:12
2005.08.28
Access - объединение двух баз


4-1120626325
KSergey
2005-07-06 09:05
2005.08.28
Длительный поток в dll и явная закгурзка.выгрузка dll


1-1123474947
Ldt
2005-08-08 08:22
2005.08.28
Из GSM кодировки в ASCII


8-1113384972
Fedor
2005-04-13 13:36
2005.08.28
Детектор движения




   Наверх