Вниз
Скачать: CL | DM;

Отменение выполнения запроса   Найти похожие ветки 

← →
DmitryMN   (2004-08-06 19:10) [0]

Как послать на сервер Firebird команду для отмены выполняющегося запроса?


← →
GRAND25 ©   (2004-08-06 19:22) [1]

Transaction1.RollbackRetaining;


← →
DmitryMN   (2004-08-06 19:26) [2]

спасибо - попробую


← →
Val ©   (2004-08-06 19:31) [3]

> [2] DmitryMN   (06.08.04 19:26)
можете не пробовать. роллбэк откатывает изменения(после выполнения запроса), а не прерывает запрос.


← →
GRAND25 ©   (2004-08-06 19:37) [4]

Тогда вызывает интерес, в какой же момент нужно прервать выполнение запроса?


← →
s999   (2004-08-06 19:46) [5]

Насколько я знаю, в семействе IB это возможно только в IB 6.5-7.1


← →
DrPass ©   (2004-08-07 00:58) [6]

Можно просто гронуть соединение


← →
DmitryMN   (2004-08-07 00:58) [7]

А как насчет Firebird - в нем можно такое сделать?
И самое главное - как это сделать?


← →
GanibalLector ©   (2004-08-07 03:34) [8]

>А как насчет Firebird - в нем можно такое сделать?

А зачем его вообще делать,если запрос будет отменен???Тогда уж лучше вообще запрос не делай.


← →
Mike Kouzmine ©   (2004-08-07 16:49) [9]

Можно создать генератор, установить в 0, запустить ХП типа
select
suspend
добавить туда проверку значения генератора и если 1 (выставляет клиент), то выходим.


← →
DmitryMN   (2004-08-07 20:42) [10]

Запрос нужен для определения количества строк в таблице и суммы по всем строкам.
На некоторых наборах данных этот запрос может отрабатывать до 5 минут. Если пользователь не захочет так долго ждать - он может отменить запрос. Вот для чего нужна отмена запроса.

To GanibalLector: если запрос выполняется - даже в процедуре - процедура ждет пока он не выполнится и не сможет отменить его в процессе выполнения


← →
Johnmen ©   (2004-08-07 21:52) [11]

>этот запрос может отрабатывать до 5 минут

Это ж сколько там записей ?!


← →
GanibalLector ©   (2004-08-07 23:13) [12]

>этот запрос может отрабатывать до 5 минут
И что select count(*) from table выполняется пять минут ???


← →
DrPass ©   (2004-08-08 00:43) [13]


> >этот запрос может отрабатывать до 5 минут
>
> Это ж сколько там записей ?!

Скорее так:
Это ж сколько там индексов?


← →
DmitryMN   (2004-08-08 02:12) [14]

Запрос выглядит как select count(*), sum(summa) from table
записей - 1.5 миллиона, индексов - 10


← →
GanibalLector ©   (2004-08-08 02:20) [15]

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


← →
DmitryMN   (2004-08-08 02:23) [16]

спасибо - буду пробовать


← →
Fay ©   (2004-08-08 03:27) [17]

2 DmitryMN   (08.08.04 02:23) [16]
Пробуй, но учти, что каждый работающий с БД поток должен иметь своё соединение (IBDataBase_или_что_там_у_тебя), а просто так брать и убивать потоки - это живодёрство и добром оно не кончится.


← →
VID ©   (2004-08-08 12:54) [18]

Fay ©   (08.08.04 03:27) [17]
Насколько я понимаю, если запустить выполнение запроса через доп. поток, но при этом использую IBDataBase, который создан в контексте основного потока, то тормоза останутся неизменными... Так что новое соединение на каждый поток это не рекомендация - это обязательное условие.


← →
DrPass ©   (2004-08-08 13:02) [19]


> Запрос выглядит как select count(*), sum(summa) from table
> записей - 1.5 миллиона,

Это немного. А что за компьютер?


← →
DmitryMN   (2004-08-08 22:40) [20]

To DrPass:
Дело в том что  программка вроде как локальная, в основном стоит на компах у юзеров, поэтому могут попадаться и слабые машины. Я, например тестирую ее на Celeron 2600/512 RAM/WinXP.


← →
Fay ©   (2004-08-09 07:46) [21]

2 VID ©   (08.08.04 12:54) [18]
Либо Вы путаете код потока с данными потока, либо я не понял, что Вы имели ввиду. У меня тормозов не наблюдалось. Кроме соседа за стеной 8).


← →
GanibalLector ©   (2004-08-11 01:18) [22]

Кстати,вот только что нашел такую вот информацию
Дает ли Delphi возможность корректно прервать выполнение SQL-запроса (BDE)?
Дает ли Delphi возможность корректно прервать выполнение SQL-запроса к серверу Oracle с помощью BDE? Например, чтобы при использовании с SQL Plus после отправки SQL-запроса на выполнение на экране появлялось окно с кнопкой Cancel, которое давало бы возможность в любой момент прервать выполнение этого запроса?

Насколько мне известно, для этой цели лучше всего использовать функции Oracle Call Interface (низкоуровневый API Oracle). В комплекте поставки Oracle есть соответствующие примеры для C, и переписать их на Pascal несложно.

Некоторые драйверы SQL Link позволяют прекратить выполнение запроса, если время его выполнения превышает заранее заданное значение (параметр MAX QUERY TIME соответствующего драйвера). Однако драйвер ORACLE, к сожалению, в их число не входит.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.5 MB
Время: 0.036 c
14-1092384888
User_OKA
2004-08-13 12:14
2004.09.05
Полифония wav


6-1088490331
leonidus
2004-06-29 10:25
2004.09.05
Компонент idHTTP не работает через прокси


10-1035384970
Erik
2002-10-23 18:56
2004.09.05
Вызов CallBack


1-1093007891
iBitmap
2004-08-20 17:18
2004.09.05
cm_mouseleave при MouseDown


4-1090158433
Dio
2004-07-18 17:47
2004.09.05
Работа с Hard




   Наверх