Главная страница
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.028 c
4-1094479229
Fktrc
2004-09-06 18:00
2004.10.10
SEMAPHORE_ALL_ACCESS отсутствует


3-1094803058
Snip
2004-09-10 11:57
2004.10.10
DLL и IB


3-1094697235
Sirus
2004-09-09 06:33
2004.10.10
Как извлечь метаданные базы IB/FB???


6-1090419041
banderas
2004-07-21 18:10
2004.10.10
Как определить IP отконнективающегося клиента (idTCPClient)


3-1095062423
Vir
2004-09-13 12:00
2004.10.10
ClientDataSet