Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.10;
Скачать: CL | DM;

Вниз

Как остановить выполнение запроса в ADO   Найти похожие ветки 

 
tERRORist   (2004-09-13 07:07) [0]

Можно ли остановить выполнение запроса запущенного через ADO?
Query Analyzer как-то же это делает...


 
sniknik ©   (2004-09-13 08:34) [1]

выполнение запроса не останавливается, останавливается получение данных (легко если использовать асинхронное выполнение, просто клозе заросу делай)
а прервать можно только процесс (KILL) если узнаеш его номер у запроса... тоже без проблем (наверное..., не пробовал за ненадобностью)


 
tERRORist   (2004-09-13 08:38) [2]

то есть можно сделать так: в отдельном треде запустить асинхронный Open, а в основном потоке сделать Close? Или делать TerminateThread?


 
sniknik ©   (2004-09-13 08:50) [3]

не путай, асинхронный это не в отдельном (твоем) потоке, а с настройкой ADO на асинхронность (оно само создаст поток), над твоим внешний обьект (ADO) никакой власти не имеет.


 
KSergey ©   (2004-09-13 09:27) [4]

To > sniknik ©

Неужели при этом на сервере выполнение не останавливается???


 
NAlexey ©   (2004-09-13 09:54) [5]

tERRORist   (13.09.04 07:07)  
У рекордсета есть метод Cancel.
KSergey ©   (13.09.04 09:27) [4]
Есть сомнения что не останавливается. Kill может и выход, хотя не пробывал.


 
tERRORist   (2004-09-13 12:15) [6]

> NAlexey ©   (13.09.04 09:54) [5]
> У рекордсета есть метод Cancel.

Я всегда считал что Cancel - есть отмена изменений текущей записи... Delphi Help: Cancels modifications to the active record if those changes are not yet posted...

> sniknik ©   (13.09.04 08:50) [3]

При попытке закрыть датасет (Close) выдается ошибка: не удается выполнить операцию во время асинхронного выполнения.
(ставлю eoAsyncExecute,eoAsyncFetch,eoAsyncFetchNonBlocking в true).

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


 
sniknik ©   (2004-09-13 13:37) [7]

> ставлю eoAsyncExecute,eoAsyncFetch,eoAsyncFetchNonBlocking в true
попробуй какоето одно.

не знаю что и сказать ;о), у меня работает.
хотя было и такое, обьяснял, сравнивали настройки, а после высылал тест (простенькая в одно действие програмка, на получение рекордсета в асинхронном режиме).
тест работал, хотя говоиили именно те же параметры до этого выставляли.
может счас с этого начать? выслать пример?
правда он под access (думаю не проблема создать базу и таблицу со 171тыс(много в общем) записей)

>  Чтоб понятней было: мне нужно показывать данные из детайл-датасет а при перемещении по мастеру, но детайл открывается долго (секунды
> 3), поэтому если пользователь перешел на другую строку нужно чтоб открытие детайла прекратилось и началось для текущей записи.
просто серверный курсор не устроит? будет открывать только то что в гид влазит.


 
tERRORist   (2004-09-13 13:55) [8]

>может счас с этого начать? выслать пример?
Если можно achechulin@protonpm.ru
Заранее спасибо, не первый раз получаю от вас хорошие советы :)

>просто серверный курсор не устроит? будет открывать только то
>что в гид влазит.
У меня детайл формируется через ХП.


 
sniknik ©   (2004-09-13 14:09) [9]

послал. там в принципе запутатся нельзя (3 кнопки всего), к использованию 2. коннект советую поначалу не перестраивать лучше базу с таблицей нужной подсунь (имя как там, + желательно много записей и поле автоинкремент назначенное ключем (межет быть важно, в моих таблицах есть)).
а как убедишся что работает, делай что хочеш.


 
tERRORist   (2004-09-13 14:38) [10]

Сэнкс, получил. Работает.
Работает потому что идет прямой селект на таблицу и ADO запускает одельный поток на получение (Fetch) уже готовых данных. Т.е. можно прервать процесс получения результатов запроса, если они слишком большие.
А у меня же результат запроса формируется ХП-ой и видимо АДО ждет пока она выполнится.


 
NAlexey ©   (2004-09-13 14:51) [11]

Я же говорю что у адошного "Рекордсета" есть метод Cancel:
ADOConnection.DataSets[0].Recordset.Cancel;
MSDN:

Cancel Method
Cancels execution of a pending, asynchronous method call.

Syntax
object.Cancel
Remarks
Use the Cancel method to terminate execution of an asynchronous method call (that is, a method invoked with the adAsyncConnect, adAsyncExecute, or adAsyncFetch option).


 
tERRORist   (2004-09-13 17:56) [12]

Да, я был не прав. Посмотрел на метод Cancel у TADODataSet, он
его наследует от TDataSet, т.е. делает отмену изменений.
А вот например у TADOCommand Cancel наследуется от Recordset"a :)

Спасибо, теперь понятно куда копать.



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

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

Наверх




Память: 0.49 MB
Время: 0.03 c
14-1095664299
Holy
2004-09-20 11:11
2004.10.10
Наладонники


1-1096360736
Леван
2004-09-28 12:38
2004.10.10
Отправка письма с атачментом


3-1094463982
Alex Z
2004-09-06 13:46
2004.10.10
Вызов хранимых процедур из Делфи! ПРОБЛЕМЫ!!!


1-1096062326
Mishenka
2004-09-25 01:45
2004.10.10
OnClick в StatusBar


14-1095836612
Vlad
2004-09-22 11:03
2004.10.10
Халатность московских служб привела к людским жертвам...