как программно приостановить выполнение запроса, что-то типа

Fib
Дата: 15.10.2003 13:40:58
suspend
if <continue flag> = OK
resume
else
terminate
iSestrin
Дата: 15.10.2003 14:07:57
никак, эта идея вообще противоречит транзакционной обработке
Fib
Дата: 15.10.2003 14:25:56
то есть, если человек запустил случайно долгую транзакцию, он не в состоянии отменить его каким-либо образом?! как-то некрасиво получается:((
buser
Дата: 15.10.2003 14:32:30
в ADO.... у объекта Command есть метод Cancel :)
Glory
Дата: 15.10.2003 14:33:32
Давайте для начала уточним, что значит "запустил транзакцию"
Это
- один запрос (т.е. одна команда SELECT/UPDATE/DELETE/INSERT) ?

- это какя-то совокупность запросов
BEGIN TRANSACTION
SELECT ...
UPDATE ...
DELETE ...
INSERT ...

- это еще что-то (процедура ???)
Это во-первых

И во-вторых, причем здесь _прерывание_ выполнения запроса/транзакции ??
Клиетское приложение в любой момент может прервать выполнение запущенного им же запроса.
iSestrin
Дата: 15.10.2003 14:34:09
отменить - пожалуйста, см kill ... но не приостановить же! - обрати внимание - "долгую транзакцию", и подумай, что при этом будут другие юзеры сосать ...
Fib
Дата: 15.10.2003 14:52:11
неправильно задалл вопрос, извините.
объясняю ещё раз.
юзер запустил запрос поиска данных по определенной маске во всех таблицах базы данных(причины не важны).
запрос типа Select ... table1 inner join..table2...where..
так вот, можно ли как в потоках винды(threads), сделать финт типа

Запускаются 2 потока,
один запускает поиск, другой показывает диалог с прогресс баром и кнопкой Cancel.
На нажатие Cancel запрос должен быть приостановлен
suspend(запрос);
и высветится месседжбокс и в зависимости от реакции пользователя:

if(MessageBox("Вы точно хотите прервать поиск?", MB_OKCANCEL) == IDOK)
{ kill (запрос); TerminateThread; }
else
{ resume(запрос); resumeThread;}

Вопрос, это возможно или маразм?:))
просто я не силен в базах данных..
Glory
Дата: 15.10.2003 14:56:50
Есть такое понятие, как асинхронное выполнение запроса, когда после запуска оного клиентская программа продолжает свое выполение. Но должно тогда само периодически проверять состояние коннекта, а котором запущен запрос. Но это опять же к серверу не имеет никакого отношения. Асинхронность задается клиентским приложением.
Fib
Дата: 15.10.2003 15:02:04
спасибо, я так и сделал уже.
но просто было интересно узнать. если, например SQL Server выполняет транзакцию, например обновления и т.д., то почему он не может приостановить транзакцию и потом продолжить..в принципе это вероятно, да и не сложно было бы реализовать. Но нет так нет, обойдемся и без этого.
iSestrin
Дата: 15.10.2003 15:02:16
возможно вот так:

if(MessageBox("Вы точно хотите прервать поиск?", MB_OKCANCEL) == IDOK)
{ kill (запрос); TerminateThread; }
else
{ /*resume(запрос); resumeThread;*/}

т.к. - еще раз - "приостановить" запрос не дано, дано только прибить совсем