Текущий архив: 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.49 MB
Время: 0.026 c