Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Вниз

Как остановить выполнение запроса в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.034 c
14-1095509530
Тупой:)
2004-09-18 16:12
2004.10.10
Где скачать FAQ по Delphi ???


11-1080941112
DriveSoftware
2004-04-03 01:25
2004.10.10
Как создать вторую форму в проекте KOL+MCK


4-1094046359
Dec
2004-09-01 17:45
2004.10.10
Создать окно, содержащее CheckBox c использованием API


4-1094794580
needle
2004-09-10 09:36
2004.10.10
Как узнать принадлежит-ли компьютер к какому-либо домену?


1-1095952653
Prokop
2004-09-23 19:17
2004.10.10
TquikcReport





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский