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

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

Как отловить сообщения о ходе выполнения ХП (на MSSQL) [D7, WinXP]


Layner ©   (2006-07-18 08:37:00) 

ХП выполняется с запуска из программы, в отдельном потоке. Программа не "замораживается", все хорошо. ХП может работать и минуту и 2 и 3... Можно ли отлавливать процент выполнения ХП любым способом? (Для отображения индикатора выполнения) Хоть самым не красивым способом :)
Как вариант, я могу слать из ХП

PRINT 'step1'
.....
PRINT 'step2'
.....
PRINT 'step3'
.....
PRINT 'step4'
.....
PRINT 'step5'
.....

и отлавливать это в программе?


sniknik   (2006-07-18 11:38:00) [1]

Desdechado ©   (18.07.06 11:20) [7]
ага, и это и так долгое время мы пытаемся сделать еще дольше... и намного.
к примеру в 1С 8.0 есть такая штука (прогрессбар) встроеная так вот если его включать то отчет строится в десятки (а то и в сотни) раз медленнее, как и все остальное. т.е. если без него минута, а если хочется видеть прогресс то час... круто.
(может это у них и можно исправить, поменьше разброс сделать (например периоды опроса побольше поставить), не знаю я не 1С-ник.)

по моему простые "часики" на курсор гораздо более правильное решение. (не, есть у меня и прогресбары но на свои обработки, и только там где не это не будет сильно тормозить... а вот лезть в чужой процесс со своим уставом избегаю)


Stanislav   (2006-07-18 11:28:00) [2]

Desdechado ©   (18.07.06 11:20) [7]
Если он собирается печатать print step 1, то транзакция скорее всего будет завершена.


Desdechado   (2006-07-18 11:20:00) [3]

Медведъ   (18.07.06 11:13) [6]
По пункту 2. Не знаю, есть ли в скуле понятие автономной транзакции, чтобы данные, записанные в таблицу были доступны в другой транзакции до окончания первой.
Уровень изоляции подключения ради этого я бы менять не стал.
Поэтому и акцентировал внимание на проблеме.

> непонятно упорное желание вместо оптимизации
Оптимизация - необходимая вещь. Но иногда (очень редко) бывают ситуации, когда требуется сильно перелопатить БД для отчета, а это может занять даже в заоптимизированном варианте долгое время.


Медведъ   (2006-07-18 11:13:00) [4]

>Desdechado ©   (18.07.06 10:49) [4]
1. @@SPID
2. у автора спроси, не знаю какие у него там транзакции
3. DELETE WHERE SPID=@@SPID в начале процедуры

PS
я не утверждаю что это хорошее решение, но если сильно хочется то самое простое


sniknik   (2006-07-18 11:07:00) [5]

> print не отловишь. Сообщение об ошибке можешь попробовать.
print это та же ошибка, только приоритетом пониже. "ловится"/читается аналогично (если читать конечно из свойств обьекта, а не ждать ексепта возбуждаемого самой дельфей, вот тут уже разница, с низким приоритетом дельфя игнорирует).

> и отлавливать это в программе?
то чего ждеш не получиш, максимум получиш все мессаги скопом по завершении отработки процедуры...

если тебе нужен прогресс то выбирать надо методы не зависимые от выполнения самого запроса.
например написать внешнюю процедуру с посылкой пакета по TCP/UDP/IP, ее и вызывать внутри (или можно NET SEND ... вместо процедуры использовать).
или установить мелкософский MSSQL-левский "месенжер" (есть такой, дополнительная служба ставится... как работает не в курсе)
или ... т.д. придумывай.

но вообще непонятно упорное желание многих здесь затормозить выполнение вместо оптимизации... самые экзотические способы выдумывают непонятно только зачем...


Desdechado   (2006-07-18 10:49:00) [6]

Медведъ   (18.07.06 08:57) [1]
Ну-ну...
А как в многопользовательской среде?
А как с транзакциями и видимостью данных быть?
А как быть в случае прерывания выполнения?


Stanislav   (2006-07-18 09:55:00) [7]

У ADOConnection есть событие onInfomessage.


paul_k   (2006-07-18 09:28:00) [8]

print не отловишь. Сообщение об ошибке можешь попробовать.
Но от лукавого это все. напиши "выполняется обработка сервером" и жди...


Медведъ   (2006-07-18 08:57:00) [9]

в табличку пиши, из другого соединения опрашивай ее периодически


Наверх

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