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

Вниз

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

 
Bless ©   (2004-03-29 16:35) [0]

Речь об АДО-компонентах.
Как прервать асинхронное выпосление запроса, который возвращает данные
и каким компонентом лучше воспользаваться?
У ADODataSet нет Cancel-а.
У ADOCommand есть Cancel, но как потом работать с возвращенным набором
данных, если у него нет свойства Recordset?


 
sniknik ©   (2004-03-29 16:42) [1]

> Как прервать асинхронное выпосление запроса, который возвращает данные
не получится, на сервере он все одно завершится, можно прервать получение данных. просто close.

> У ADOCommand есть Cancel, но как потом работать с возвращенным набором
> данных, если у него нет свойства Recordset?
ADODataSet.RecordSet:= ADOCommand.Execute;
но это тоже самое.


 
Bless ©   (2004-03-29 17:17) [2]

sniknik[1]>
>ADODataSet.RecordSet:= ADOCommand.Execute;
>но это тоже самое.

Не совсем. Например, надо сделать крупную выборку с возможностью прервать ее. Как это сделать?
cmd.ExecuteOptions:=cmd.ExecuteOptions+[eoAsyncFetch];
Если сделать сразу вслед за этим
ds.dataset:=cmd.Execute, то в ds будет не весь результат, а только то, что успело выбраться к моменту выполнения команды. Или нет?


 
sniknik ©   (2004-03-29 17:31) [3]

а тебе нужен весь, сразу?

тогда немного не так, делаеш в одном датасете (чтобы свой поток не делать с ожиданием) с параметром eoAsyncFetch Open, а в его ADODataSet1.onFetchComplete делаеш ADODataSet2.Clone(DataSet); ко всем контролам привязывай естественно второй.
или даже лутше
делаеш запрос в ADOCommand с опцией eoAsyncExecute а в ADOConnection1.onExecuteComplete - ADODataSet2.Recordset:= Recordset;
к контролам естественно его(2) привязывай. еще естественно проверяй Command.State вдруг не завершился и Command.CommandText вдруг не тот. ;о)


 
Bless ©   (2004-03-29 18:10) [4]

sniknik[3]> Спасибо. Попробую.


 
Bless ©   (2004-03-30 09:43) [5]

sniknik ©  (29.03.04 16:42) [1]>
>можно прервать получение данных. просто close.

Тут еще один вопрос возник:
Сделал простое приложение.
1 adodataset с ExecuteOptions=eoAsyncExecute
и выборкой из большой таблицы.

Так вот, если закрыть приложение до того, как закончилась выборка,
то выскакивает ошибка

Project Project1.exe raised exception class
EOleException with message
"Operation cannot be performed while executing asynchronously".
Process stopped. Use Step or Run to continue.

Причем, adodataset.close при закрытии формы ничего не меняет.
И если пошагово прогнать, видно, что
команда adodataset.close срабатывает нормально а ошибка выскакивает
непонятно где (на последнем "end." в project1).
Кто знает причину?

Эта ошибка не выскакивает, если вместо eoAsyncExecute стоит eoAsyncFetch.


 
Bless ©   (2004-03-30 09:57) [6]

Из интереса поменял adodataset na adocommand
с тем же запросом
select * from pozib (в pozib - 300 000+ записей)
а в OnClose формы вместо adodataset.close - adocommand.cancel.
В результате, после alt+f4 на adocommand.cancel все застряло
секунд на 30 - время, достаточное для завершения выборки.
Как сие пояснить?


 
sniknik ©   (2004-03-30 12:03) [7]

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

> Как сие пояснить?
ты полностью зависиш от того как там метод написан в com обьекте (влезть в него нет возможности), и если ему проще завершить выборку чем терминировать, то так тому и быть. ;)


 
Bless ©   (2004-03-30 14:39) [8]

:)
Ладно, да будет так.
Спасибо.



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

Форум: "Базы";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.038 c
1-1081389706
Slavik_v
2004-04-08 06:01
2004.04.25
Узнать код нажатой функциональной кнопки


3-1080537249
WondeRu
2004-03-29 09:14
2004.04.25
ADOConnection.ConnectionString


7-1077917612
Nekto
2004-02-28 00:33
2004.04.25
%systemroot%


1-1081084316
Kalista
2004-04-04 17:11
2004.04.25
Создание компанентов


3-1080655692
DimonNew
2004-03-30 18:08
2004.04.25
Компонеты Rave и ADO.NET





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский