Текущий архив: 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.019 c