|
|
|
ProgressBar на клиенте
|
|||
|---|---|---|---|
|
#18+
Клиентская программа на Дельфях. Какое-то действие инициирует запуск хранимой процедуры в БД, которая выполняется довольно продолжительное время. Можно ли каким-нить образом отловить ход работы этой процедуры и показывать субж. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2002, 14:40:20 |
|
||
|
ProgressBar на клиенте
|
|||
|---|---|---|---|
|
#18+
Нет такой возможности. Также невозможно узнать время, за которое выполнится процедура. Крути просто мультяшку - анимированый гифчик во время исполнения процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2002, 16:21:42 |
|
||
|
ProgressBar на клиенте
|
|||
|---|---|---|---|
|
#18+
ну не совсем так... Я делаю так: Создаю таблицу с 2 полями(count,current) в первое перед выполнением пишу count всех записей, которые обрабатываются во второе переменную, которая автоинкрементируется в курсоре. А в Delphi в отдельном потоке(чтоб не висело) периодически считываю в progressbar И всегоделов. PS не забывайте обнулять счетчики :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2002, 20:41:14 |
|
||
|
ProgressBar на клиенте
|
|||
|---|---|---|---|
|
#18+
sorry, просто инкрементирую :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2002, 20:42:30 |
|
||
|
ProgressBar на клиенте
|
|||
|---|---|---|---|
|
#18+
А у меня сообщения просто во время выполнения ХП через собственный COM сервер рассылаются по клиентам. Кому надо, тот отслеживает, и тот же индикатор синхронизирует. Чем удобно, что можно сделать прогу монитор и в ней такие сообщения регистрировать для отладки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2002, 00:04:07 |
|
||
|
ProgressBar на клиенте
|
|||
|---|---|---|---|
|
#18+
А у меня сообщения просто во время выполнения ХП через собственный COM сервер рассылаются по клиентам. Кому надо, тот отслеживает, и тот же индикатор синхронизирует. Чем удобно, что можно сделать прогу монитор и в ней такие сообщения регистрировать для отладки а чуть подробнее можно - в общих словах как это все работает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2002, 10:30:46 |
|
||
|
ProgressBar на клиенте
|
|||
|---|---|---|---|
|
#18+
Очень медленно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2002, 14:38:29 |
|
||
|
ProgressBar на клиенте
|
|||
|---|---|---|---|
|
#18+
Почему медленно. Это все зависит от того, как сделать. На входе в ХП COM-сервер создается, на выходе соответственно удаляется. Процедура расчета заработной платы - расчет не горизонтальный (то есть по договорам), а вертикальный (по начислениям/удержаниям). Естественно я не могу на клиента послать какие договора я расчитываю, потому как расчеты идут запросами, а не перебором записей через курсор. Зато я могу посылать сообщение о завершении расчета каждого обьекта начисления/удержания. На этом тоже можно построить тот же индикатор. Мониторинг тоже работает, так как отлавливает сообщения того же расчета и при желании по соответствующим таблицам может вытаскивать кого и за что считали :) Сам COM сервер сделан на Delphi и элементарен - соответствующие методы принимают номер сообщения и его параметры, через встроеные в Delphi компоненты NET зарегистрированному клиенту (клиентам) по его сетевому адресу и порту передается сообщение. Соответствующе такие же компоненты висят в клиентах, принимают сообщение, распаковывают и всем подписанным формам рассылают сообщения. Далее по усмотрению самих форм. Чем кстати механизм удобен, что можно организовывать оповещения клиентов о различных событиях, организовать чат и осуществлять мониторинг параллейных процессов, например запущенных ХП расчетов через SQL Agent. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2002, 16:00:15 |
|
||
|
ProgressBar на клиенте
|
|||
|---|---|---|---|
|
#18+
2ASCRUS Да вы не обижайтесь, я ж вроде как и смайл поставил - типа шутка... Естественно, то что вы описали(я правда и до этого знал как это делается) это очень хорошо... Но. Это не решает всех проблем. Представьте ситуацию - сохраненная процедура и в ней один всего лишь оператор на апдейт, но зато этот апдейт в зависимости от входных параметров может длится от секунды, до 10 минут. Как тут будет работать ваш ком-объект? А никак он не будет работать. А что бы он заработал - нужно процедуру переделать таким образом, что бы можно было отслеживать каждое обновление отдельной строки... Ну а это уже курсор(ну собственно именно это вы и описали в серединке постинга) -> курсор+ком-объект=тормоза :)) ЗЫ Короче вывод такой - ваш метод прекрасен и в большинстве случаев очень полезен, но на всеобщую панацею не тянет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2002, 16:58:04 |
|
||
|
ProgressBar на клиенте
|
|||
|---|---|---|---|
|
#18+
Я вот что хочу сказать. ИМХО, ради прогресс-бара делать процедуру через курсор - это ... даже не знаю, как сказать. Глупость, вот и все. Всем известно, что курсоры ужасно тормозят работу сервера... Поэтому... игра не стоит свеч, а результат труда... ;-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2002, 19:50:47 |
|
||
|
ProgressBar на клиенте
|
|||
|---|---|---|---|
|
#18+
Я использую такой приём. Есть вспомогательная табличка, где для таких длительных процедур записано время их выполнения. После каждого вызова процедура корректирует это время, приближая к некоему статистическому значению. (Но можно этого и не делать) В клиентском приложении перед запуском процедуры определяется приблизительное время её выполнения. Затем асинхронно запускается процедура. По таймеру меняется прогресс-бар. Конечно, так не показывается ход выполнения, а время приблизительное и зависит от разных условий. Но так ли нужно пользователю знать, какой шаг процедуры выполняется, и сколько точно времени это займёт - 320 или 345 секунд. Я думаю достаточно приближённой оценки - "Успею кофе выпить, или ещё и сигаретку выкурить, пока ПРОЦЕСС ИДЁТ?" ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2002, 11:02:59 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32033588&tid=1822223]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 329ms |

| 0 / 0 |
