Главная страница
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.024 c
1-60199
OlegM
2003-06-05 12:13
2003.06.19
Как получить имена всех компонентов на форме опред. типа


8-60270
Карелин Артем
2003-03-07 06:49
2003.06.19
Проигрывание видео и аудио из базы. Не сохраняя на винт.


1-60160
child_sun
2003-06-06 23:26
2003.06.19
Помогите написать скринсейвер


4-60473
CAHbKA
2003-04-18 09:12
2003.06.19
Проводник


1-60267
Analaiser
2003-06-06 08:33
2003.06.19
Помогите сделать контрольные по Дельфям!!!