Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.05;
Скачать: 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 вся ветка

Текущий архив: 2004.09.05;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.046 c
1-1092936808
3APA3A
2004-08-19 21:33
2004.09.05
Правильное использование Dispose()...


4-1090575633
webpauk
2004-07-23 13:40
2004.09.05
TStrings


1-1093004709
Sectey
2004-08-20 16:25
2004.09.05
Strring to PAnsiString Как ?


4-1090315529
maguk
2004-07-20 13:25
2004.09.05
Вопрос по RichEdit 2.0


1-1092980126
Optimizator
2004-08-20 09:35
2004.09.05
Проблемы с DBEdit