![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отменть запрос во время его выполнения. [D5, IB6.x, FB]
Andrey V. © (2003-11-25 13:52:00)
Как бы сделать сабжевую штуку ?
Типа вывесить окно с кнопкой "отменить" и слово "Ждите..." .
И по нажатию кнопки отменить выполнение запроса.
Johnmen (2003-11-25 15:24:00) [1]
Да можно просто в простом запросе это добавить. И указать эту проверку первой в where. ХП вовсе не нужна...
А с ХП уж лучше, в смысле, быстрее, просто делать проверку знач.генератора (не в запросе, но в цикле), и отваливаться...
Andrey V. (2003-11-25 14:20:00) [2]
Мда. Довольно геморрно. Спасибо.
Digitman (2003-11-25 14:01:00) [3]
оформляй исполнение запроса в ХП, возвращающей НД с пом. курсора :
FOR
SELECT ..
FROM ..
WHERE ((... ) AND (GEN_ID(GEN_ABORT, 0)= 0)
INTO ...
DO
SUSPEND;
по нажатию на кнопку стартуешь док.тред, в котором создаешь отдельный коннект к той же базе и инкрементируешь генератор GEN_ABORT
с этого момента условие GEN_ID(GEN_ABORT, 0)= 0 выполнено не будет, курсор будет уничтожен, ХП завершится, тем самым выполнение запроса будет корректно прервано
Карелин Артем (2003-11-25 13:59:00) [4]
Обирясали мы как-то этот вопрос. В общем случае нельзя. Можно перестать фетчить записи.
Zacho (2003-11-25 13:59:00) [5]
Единственный правильный способ:
1.Создаем генератор.
2. Создаем ХП с выборкой FOR SELECT, внутри цикла FOR SELECT проверяем значение этого генератора, если оно равно чему-то определенному (например, 1) - то exit
3. Запускаем запрос SELECT * FROM SP в отдельном потоке, и естественно в отдельном коннекте и отдельной транзакции.
4. В основном потоке делаем окошко с кнопкой "отменить", по нажатию этой кнопки устанавливаем значение генератора.