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

Вниз

Прерывание выполнения запроса.   Найти похожие ветки 

 
KDS ©   (2003-05-27 14:21) [0]

Если запрос к БД выполняется очень долго и пользователю надоело ожидать результат возможно ли прервать его выполнение (допустим, по нажатию кн. "Прервать")? И как это реализовать программно?
Или же: как можно контролировать ход его выполнения визуально, используя нечто вроде "TProgressBar"?

P.S. FireBird=IB6.х, компоненты IBObjects.
Заранее благодарен.
Димыч.


 
Johnmen ©   (2003-05-27 14:47) [1]

1. Прервать на клиенте или выполнение запроса сервером ?
2. Полноценно и корректно прогрессбаром нельзя.


 
KDS ©   (2003-05-27 14:58) [2]

>Johnmen
1. так как это было бы корректно и по отношению к программе и к серверу. Не знаю, поэтому и спрашЫваю.
Юзер нажал кн."Прервать" и продолжает работу в программе дальше. Зачем же сервачку пыхтеть зря над выполнением уже ненужного задания?


 
Johnmen ©   (2003-05-27 15:26) [3]

Как минимум, придется заводить еше один поток, в смысле "нить"...
В котором выполнять запрос, а в основном асинхронно прибивать этот поток. Но при этом сервер будет продолжать выполнение запроса. Но и это можно обойти, но способ слишком "искусственен"...


 
Digitman ©   (2003-05-27 15:26) [4]


> KDS


зайди ibase.ru, там есть статьи на эту тему с примерами

концептуально это выглядит так :

"тяжелый" запрос выносится в ХП (например, в цикл for select .. where УСЛОВИЯ_ОТБОРА do.. suspend) и УСЛОВИЯ_ОТБОРА дополняются еще и условием проверки значения специально создаваемого для этой цели генератора

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

перед стартом "тяжелого" запроса спецгенератору задается, например, начальное значение 0 (при таком значении "спецусловие" = TRUE).
когда необходимо прервать "тяжелый" запрос, доп.кодовый поток изменяет значение спецгенератора с 0 на 1, "спецусловие" становится = FALSE, и запрос, проверяющий его для каждой обрабатываемой записи, автоматически и корректно прерывается



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

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

Наверх




Память: 0.48 MB
Время: 0.023 c
1-60193
Xeon
2003-06-04 16:41
2003.06.19
Реестр


6-60298
korvet
2003-04-18 10:55
2003.06.19
Простая функция PING


7-60427
Lamerr
2003-03-19 15:08
2003.06.19
Системное время


4-60472
Andrey007
2003-04-17 16:40
2003.06.19
Как ловить событие ухода из программы по нажатию Alt+Tab?


3-60082
Dimaz-z
2003-05-28 15:16
2003.06.19
Какой запрос надо поставить, чтобы сортировать базу по алфавиту?