Форум: "Базы";
Текущий архив: 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