"Отмена запроса" как это сделать?

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 28 мар 2007, 18:58

CyberMax писал(а):но можно завершить поток, запустивший запрос, что приводит к остановке его [запроса] выполнения сервером.
Ни к чему он не приводит. Может я чего не понял? Не будем путать фетч с выполнением запроса. Запрос как выполнялся, так и продолжит выполнение, и только когда сервер получит первые данные на выдачу, он спохватится, что клиент спёкся, и закроет лавочку.
WildSery писал(а):Серега, хорош дурака валять. Сам догадаешься или методику рассказать?
100% для fbserver?
Дык вовсе не очевидно, что именно твоим запросом он занят, вроде.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 28 мар 2007, 19:28

Народ, хватит писать херню (кроме WildSery), честное слово, особенно это к Dmitry74 относится.

Если тебя интересует, ПОЧЕМУ нельзя снять запрос в Firebird, то я отвечу - нет таких механизмов пока, как в InterBase 7.5/2007.

Прочитай
http://www.ibase.ru/devinfo/client.htm

так вот. Во время Excecute запрос можно прервать только в IB 6.5/7.x/2007, и то не всегда.
Время выполнения Execute зависит от метода, которым запрос выполняется. Если например в плане PLAN SORT, то хрен ты чем выполнение этой сортировки остановишь (кроме как в упомянутых версиях IB).
А IBExpert не прерывает запрос. Он или убивает клиентский поток, в котором запрос выполняется, или просто прекращает fetch, что и ты можешь сделать без проблем.

p.s. о чем это говорит
1. буйствовать тут не надо, и злить меня не надо попытками уличить что я не знаю что отвечаю.
2. на сайте есть куча информации. в том числе и по данному вопросу, где все разжевано до предела. Нефиг форум превращать в какой-то вертеп.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 28 мар 2007, 19:34

и еще. если оборвать коннект, прибить приложение, и т.п., то сервер когда соберется ответить клиенту после выполнения Execute, обнаружит что клиентский сокет умер, и закроет ресурсы, выделенные для этого коннекта. Правда, это тоже бывает не всегда, особенно на классике, когда остаются висеть процессы. но это уже другая история - www.ibase.ru/devinfo/keepalive.htm

Ответить