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

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

Модератор: kdv

Dmitry74
Сообщения: 70
Зарегистрирован: 31 июл 2006, 15:55

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

Сообщение Dmitry74 » 23 мар 2007, 17:55

С радостью узнал что ФБ2 можно отменять запросы!

Подскажите как это можно сделать програмно?
(использую ДЕЛФИ 7 Политра компонентов InterBase)

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

Сообщение kdv » 23 мар 2007, 23:56

мда. если узнал, так скажи где - там же должно быть написано, как :)

Dmitry74
Сообщения: 70
Зарегистрирован: 31 июл 2006, 15:55

Сообщение Dmitry74 » 26 мар 2007, 11:23

Там не написано! :)

Если не знаешь так и пиши не знаю!

Dmitry74
Сообщения: 70
Зарегистрирован: 31 июл 2006, 15:55

Сообщение Dmitry74 » 26 мар 2007, 11:31

Проводил эксперемент
Запускал в приложении долгоиграющий запрос, а потом вырубал приложение из диспетчера задач.

Дак вот ФБ 1.5 с настойчивойстью осла продолжал выполнять этот запрос, а последний ФБ2 прекращал его выполнять (и правильно делал :) )

Можно ли какнибудь программно дать команду серверу , что
запрос выполнять не нужно!?

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

Сообщение kdv » 26 мар 2007, 17:51

Можно ли какнибудь программно дать команду серверу , что
запрос выполнять не нужно!?
НЕТ.
Выполнение запросов можно отменить только:
1. в IB 6.5 через спец-вызов IB API
2. в IB 7.x/2007 через таблицы tmp$
3. возможно в FB 2.1, через таблицы mon$. не уверен, что будет можно.
Если не знаешь так и пиши не знаю!
ты меня поучи еще, как мне отвечать на моем форуме, и чего я знаю, а чего нет. Если я чего не знаю, я или так и пишу, или вообще не отвечаю.
А вот ты где-то чего то "узнал", и даже не знаешь, где.

PagaN
Сообщения: 12
Зарегистрирован: 16 дек 2006, 23:12

Сообщение PagaN » 27 мар 2007, 22:49

Может вот это поможет?

http://delphikingdom.ru/asp/viewitem.asp?catalogid=418

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

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

Поможет в чём?
Очень малое число запросов должно проектироваться с возможностью прерывания.
Из более чем 2000 у меня в базе - только 3 таких, прерываемых.
Про прерывание же "обычных" запросов уже всё сказано.

Dmitry74
Сообщения: 70
Зарегистрирован: 31 июл 2006, 15:55

Сообщение Dmitry74 » 28 мар 2007, 13:35

WildSery писал(а):Поможет в чём?
Очень малое число запросов должно проектироваться с возможностью прерывания.
Из более чем 2000 у меня в базе - только 3 таких, прерываемых.
Про прерывание же "обычных" запросов уже всё сказано.
Скажите только одно
как прервать запрос выполняемый в потоке?
Ибо даже если поток уничтожаешь запрос продолжает выполняться.

Если же вырубить приложение то он прекращается.

Если не знаете то не пишите!!!

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

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

Dmitry74 писал(а):Скажите только одно
как прервать запрос выполняемый в потоке?
Ибо даже если поток уничтожаешь запрос продолжает выполняться.
Такое впечатление, что ты не читаешь ответов.
Дмитрий тебе разжевал всё. На FB2 - никак.

Запрос выполняется не в потоке, а на сервере. А твой поток только ожидает получения данных (если упрощённо).

Dmitry74
Сообщения: 70
Зарегистрирован: 31 июл 2006, 15:55

Сообщение Dmitry74 » 28 мар 2007, 14:24

WildSery писал(а):
Dmitry74 писал(а):Скажите только одно
как прервать запрос выполняемый в потоке?
Ибо даже если поток уничтожаешь запрос продолжает выполняться.
Такое впечатление, что ты не читаешь ответов.
Дмитрий тебе разжевал всё. На FB2 - никак.

Запрос выполняется не в потоке, а на сервере. А твой поток только ожидает получения данных (если упрощённо).
Да я не правильно выразился!!!
Я прекрасно знаю, что запрос выполняется на сервере!
Поток в приложении да действительно ждёт ответа с сервера!
Как сделать чтобы поток прекращал ждать?

Проверял я в IBExpert может прекращать ждать! И сервер FB2 прекращает выполнять запрос. (в отличие от FB1.5).

Это всё проверено, а Вы говорите ,что никак.

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

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

Dmitry74 писал(а):И сервер FB2 прекращает выполнять запрос. (в отличие от FB1.5).
Как ты это увидел, интересно знать.

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 28 мар 2007, 14:43

Dmitry74 писал(а):Как сделать чтобы поток прекращал ждать?
Например, создаешь потомка от TThread, который запускает запрос и ждет его завершения. Этот вторичный поток можно в любое время терминировать. Хотя не факт, что это правильно.
Dmitry74 писал(а):Проверял я в IBExpert может прекращать ждать! И сервер FB2 прекращает выполнять запрос. (в отличие от FB1.5).
Спроси у Хвастунова, как он это сделал :lol:.

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 28 мар 2007, 14:44

WildSery писал(а):
Dmitry74 писал(а):И сервер FB2 прекращает выполнять запрос. (в отличие от FB1.5).
Как ты это увидел, интересно знать.
Там же есть запуск в Background'е... Наверно, он про него говорит. Сам этим пользуюсь, когда предполагаю, что тестовый запрос будет выполняться очень долго.

Dmitry74
Сообщения: 70
Зарегистрирован: 31 июл 2006, 15:55

Сообщение Dmitry74 » 28 мар 2007, 14:50

CyberMax писал(а):
Dmitry74 писал(а):Как сделать чтобы поток прекращал ждать?
Например, создаешь потомка от TThread, который запускает запрос и ждет его завершения. Этот вторичный поток можно в любое время терминировать. Хотя не факт, что это правильно.
Dmitry74 писал(а):Проверял я в IBExpert может прекращать ждать! И сервер FB2 прекращает выполнять запрос. (в отличие от FB1.5).
Спроси у Хвастунова, как он это сделал :lol:.
Спасибо что просвитил про TThread :D это я и так знал!

Но вся фигня в том что поток НЕ УБИТЬ если он ждёт ответа с сервака!

А в IBExperte это научились делать!

Dmitry74
Сообщения: 70
Зарегистрирован: 31 июл 2006, 15:55

Сообщение Dmitry74 » 28 мар 2007, 14:53

CyberMax писал(а):
WildSery писал(а):
Dmitry74 писал(а):И сервер FB2 прекращает выполнять запрос. (в отличие от FB1.5).
Как ты это увидел, интересно знать.
Там же есть запуск в Background'е... Наверно, он про него говорит. Сам этим пользуюсь, когда предполагаю, что тестовый запрос будет выполняться очень долго.
Совершенно верно!!!

аналогично делаю!!! :wink:

Dmitry74
Сообщения: 70
Зарегистрирован: 31 июл 2006, 15:55

Сообщение Dmitry74 » 28 мар 2007, 14:54

WildSery писал(а):
Dmitry74 писал(а):И сервер FB2 прекращает выполнять запрос. (в отличие от FB1.5).
Как ты это увидел, интересно знать.
Про диспетчер задач слышали?

Dmitry74
Сообщения: 70
Зарегистрирован: 31 июл 2006, 15:55

Сообщение Dmitry74 » 28 мар 2007, 14:57

CyberMax писал(а):
Dmitry74 писал(а):Как сделать чтобы поток прекращал ждать?
Например, создаешь потомка от TThread, который запускает запрос и ждет его завершения. Этот вторичный поток можно в любое время терминировать. Хотя не факт, что это правильно.
Dmitry74 писал(а):Проверял я в IBExpert может прекращать ждать! И сервер FB2 прекращает выполнять запрос. (в отличие от FB1.5).
Спроси у Хвастунова, как он это сделал :lol:.
Гражданин Хвастунов ответьте ПОЖАЛУЙста! :?:

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

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

Dmitry74 писал(а):Спасибо что просвитил про TThread :D это я и так знал!
Но вся фигня в том что поток НЕ УБИТЬ если он ждёт ответа с сервака!
Неправда. Для этого есть WinAPI функция TerminateThread, но у нее побочные эффекты.
Dmitry74 писал(а):Гражданин Хвастунов ответьте ПОЖАЛУЙста!
Не ответит. Хвастуонв - автор IB Expert и здесь не появляется. Спрашивай на сайте Эксперта :).
P.S. Считается хорошим тоном в цитировании использовать только фразу, на которую отвечаешь. Иначе посты становятся громоздкими и иногда бывает не понятно, к чему привязываешь свой ответ.

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

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

Блин :cry:
Я отлично знаю, что делает эксперт.
Но убитие потока, который ожидает ответа сервера не прекращает выполнение запроса на сервере.
Dmitry74 писал(а):Про диспетчер задач слышали?
Как ты в диспетчере задач видишь, выполняет сервер твой запрос или уже нет?

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 28 мар 2007, 17:05

Давайте подытожим. Выполнение запроса нельзя отменить, но можно завершить поток, запустивший запрос, что приводит к остановке его [запроса] выполнения сервером.
WildSery писал(а):Как ты в диспетчере задач видишь, выполняет сервер твой запрос или уже нет?
Серега, хорош дурака валять. Сам догадаешься или методику рассказать?

Ответить