Асинхронный запрос - уже объезженная тема

RAMZEZ II

Но все, таки к сабжу.Привет всем.я уже писал в форум по поводу асинхронного select * from .....все равно не могу понять почемк не работает так как я хочу.запускаю выборку через ADOQuery с eoAsyncExecute = true, в это время пускаю прогресс бар. Все работает, возвращает записи.Но при длительном запросе при нжатии кнопки Прервать, рекордсет не возвращается (это бог с ним - не важно), но запрос как бы продолжается. И если в это время я задаю условия для нового запроса с маленьким рекоордсетом, то программа думает и иещт как-будто там пара милиона записей :-((((Прерывание делаю так: ADOQuery.Recordset.Cancelчто может быть не так??????????
6 ответов

RAMZEZ II

А почему не ADOQuery.Close ?


RAMZEZ II

тогда он будет доделывать первый запрос, а мой воторой выполнится послеа мне хотелось бы чтобы он прервался.


RAMZEZ II

Какой второй запрос ? Если изменить текст уже открытого запроса, то он закроется и не вернёт ничего, так как никто его снова не открыл. Я так думаю.Можно посмотреть в отладчике.


RAMZEZ II

Какой второй запрос ?
тот который возвращает записей меньше


RAMZEZ II

Код в студию !


RAMZEZ II

// Канцелимprocedure CancelOfRun;begin dm.qrSelect.Cancel; dm.qrSelect.Close; sleep(0);end;//­ Собственно сама выборка.....dm.qrSelect.SQL.Clear; dm.qrSelect.SQL.Add('EXEC spu_Exec'); try dm.qrSelect.ExecuteOptions:=[eoAsyncExecute]; DBGrid1.DataSource.Enabled:=false; Application.ProcessMessages; dm.qrSelect.Open; FPbar.Show; //Прогресс бар while dm.qrSelect.State in [dsOpening] do begin Application.ProcessMessages; FPBar.ELGauge.Value:=FPBar.ELGauge.Value+10; if FPBar.ELGauge.Value = 100 then begin FPBar.ELGauge.Value:=0; FPBar.ELGauge.Value:=FPBar.ELGauge.Value+10; end; Sleep(100); end; if dm.qrSelect.State in [dsBrowse] then begin DBGrid1.DataSource.Enabled:=true; FPBar.Close; dm.qrSelect.ExecuteOptions:=[]; end; except MessageDlg(Ошибка',mtError,[mbOk],0); dm.qrSelect.Close; end;