Код: Выделить всё
TMyThread.Execute;
begin
DataSet.Open;
end;
Компоненты: IBX
Сервер : Firebird 1.0.3
Код: Выделить всё
TMyThread.Execute;
begin
DataSet.Open;
end;
Раньше надо было думать, на этапе написания процедуры!Juice писал(а):В отдельном потоке выполняется длительный запрос к ХП :Как можно корректно остановить выполнение этого запроса из другого потока?Код: Выделить всё
TMyThread.Execute; begin DataSet.Open; end;
Компоненты: IBX
Сервер : Firebird 1.0.3
Вы что никогда не занимались программированием, а только сидели и 'думали' ? Во-первых, с чего вы взяли что написал процедуру я? Во-вторых, кто сказал что процедура не может быть длительной? В-третьих, что с точки зрения клиентской стороны изменится если вместо процедуры будет просто долгий запрос к таблицам БД? В-четвертых, я точно знаю что ответ на мой вопрос есть, просто я его не знаю и уже долго не могу решить самостоятельно этот вопрос.Раньше надо было думать, на этапе написания процедуры!
а не надо этот вопрос пытаться решать абы где.уже долго не могу решить самостоятельно этот вопрос
надеюсь, что и с отдельным IBDatabase для этого потока.В отдельном потоке выполняется длительный запрос к ХП :
как именно рыл? я вот, как дурак, в поиске пишу "снять запрос", и первый же документ содержит описание, как.Перерыл весь сайт, ничего не нахожу.
надеюсь, что и с отдельным IBDatabase для этого потока.
я не понял, ты faq читал, или нет? www.ibase.ru/ibfaq.htmЯ выполняю все open в отдельном потоке, а что делать если пользователю надоело ждать ?
обычно ее решают очень простым способом - проектируют БД и пишут запросы так, чтобы любой запрос не выполнялся более 5-ти минут. А если это оч. сложный запрос - то не более 15-ти минут.Может вы что-то посоветуете, интересно , если такая возм. есть только в новейших версиях то как решали эту проблему раньше ?
это ошибка, потому что в этом нет никакого смысла. Кой толк в этом параллельном thread если он все равно блокируется?Нет, не с отдельным, однако я имею 100%-ую гарантию что с компонентами доступа к БД в это время другой поток не работает. Это ошибка?
слушай, сейчас ведь забаню нафиг.Получается, что мне надо в каждом потоке создавать TIBDatabase ?
очевидно, потому что у тебя НЕТ НИКАКОГО ПАРАЛЛЕЛЬНОГО ВЫПОЛНЕНИЯ.И почему я делю один TIBDatabase между потоками и все нормально работает ? Извините, не понимаю, а на веру такие вещи опасно принимать - рано или поздно боком вылезет.
Вот интересно - а почему мне такой фичи не хочецо вовсе? Да и 90% программеров, проработавших с сервером плотно больше пары лет? Что-то мысли в сторону консерватории пошли... философический настрой у меня сегодня...kdv писал(а):ну и славно, трам-пам-пам. только все равно пока в FB нет возможности "снять" запрос. увы.
Вставлю свои 5 коп., если позволите. Можно в тяжелом запросе использовать обращение к специально для этого созданному генератору. Тогда, чтобы запрос прекратил свое выполнение, нужно дернуть генератор. Работает, но несколько перанально все же...kdv писал(а):добавлю насчет консерватории - я тебе серьезно говорю, что когда запрос выполняется пол-часа, это уже ненормально. То есть, вместо того чтобы делать отчеты по оперативным данным, их надо суб-агрегировать. То есть, уменьшать число обсчитываемых данных. Перефразируя, задача превращается не в "снятие долгоиграющих запросов", а в "быстрое выполнение запросов". Соответственно, необходимость "снятия" отпадает как таковая.
Версия 2 вышла.в FB 2.0 появляется нечто вроде "временных системных таблиц", только иное. как там будет со снятием запросов - я пока не знаю.
Проблема имхо из пальца высосана.Kyarginski писал(а):Что с прерыванием длительного запроса с клиента теперь?
О!Посмотри на 2.1, там вроде бы есть.
Про "высосанную из пальца" проблему - не согласен!Проблема имхо из пальца высосана.
Не бывает процедур со штатной возможностью прерывания.
А если бывает, то в них такие функции встраиваются. Таймаутом и/или генератором.
И не надо "ля-ля", что это проктология. Удобно и функционально. Могу пример привести.