Cum să opriți executarea interogării în ADO
Este posibil să opriți executarea unei cereri inițiate prin ADO?
Analiza interogărilor o face cumva.
executarea interogării nu se oprește, datele sunt oprite (cu ușurință dacă utilizați execuția asincronă, faceți doar clauza de forjare)
și puteți întrerupe doar procesul (KILL) dacă îi cunoașteți numărul din interogare. de asemenea, fără probleme (probabil nu a încercat ca inutil)
care este, puteți face acest lucru: într-un thread separat executați un Open asincron, iar în firul principal face Close? Sau terminați?
Nu confunda, asincronul nu este într-un fir separat (dvs.), dar cu setarea ADO la asincron (acesta va crea fluxul în sine), obiectul dvs. extern (ADO) nu are putere.
Întotdeauna am crezut că Cancel - există o anulare a modificărilor la înregistrarea curentă. Ajutor Delphi: Anulează înregistrarea activă dacă aceste modificări nu au fost încă publicate.
Când încercați să închideți Închidere, apare o eroare: operația nu poate fi efectuată în timpul executării asincrone.
(pune eoAsyncExecute, eoAsyncFetch, eoAsyncFetchNonBlocking la true).
Pentru a face mai clară: trebuie să afișez date din setul de date și când navighez pe maestru, dar detaliile se deschid mult (secundele 3), deci dacă utilizatorul sa mutat pe o altă linie, este necesar ca detaliile să fie oprite și să fie pornite pentru înregistrarea curentă.
> pune eoAsyncExecute, eoAsyncFetch, eoAsyncFetchNonBlocking la true
încercați unul.
Nu știu ce să spun, o), funcționează pentru mine.
deși au existat astfel, a explicat, a comparat setările, și apoi a trimis testul (nerăbdător într-un program de acțiune, pentru a primi o înregistrare în modul asincron).
Testul a funcționat, deși au vorbit exact aceiași parametri înainte de asta.
poate începe asta? trimite un exemplu?
deși este accesat (cred că nu este o problemă crearea unei baze de date și a unui tabel cu 171 mii de înregistrări în total)
> # xA0; pentru a fi mai clară: trebuie să afișez datele din setul de date în timp ce se mișcă prin master, dar detaliile se deschid mult timp (secunde
> 3), deci dacă utilizatorul a trecut la o altă linie, este necesar să deschideți detaliul și să începeți pentru înregistrarea curentă.
doar un cursor de server nu va funcționa? va dezvălui doar ceea ce este în ghid.
> Poate începe asta? trimite un exemplu?
Dacă este posibil, [email protected]
Multumesc anticipat, nu prima data cand primesc sfaturi bune de la tine :)
> Doar un cursor de server nu va funcționa? va deschide doar asta
> că ghidajul este umed.
La mine se formează detaliile.
Am trimis. există, în principiu, nu poate fi zaputatsya (3 butoane total), pentru utilizare 2. Connect inițial nu recomanda pentru a reconstrui o bază mai bună cu tabelul de podsun dorit (numele acolo, + de dorit la o mulțime de înregistrări și domeniul auto-increment scop cheie (mezhet important, există în masa mea) ).
dar cum să vă asigurați că funcționează, faceți ceea ce doriți.
Sanks, primite. Acesta funcționează.
Funcționează deoarece există o selecție directă pe masă și ADO lansează un thread individual pentru a primi (prelua) datele finite. Ie Puteți întrerupe procesul de obținere a rezultatelor interogării dacă acestea sunt prea mari.
Și la mine rezultatul cererii este format HP-oh și probabil ADO așteaptă în timp ce va fi executat.
Vă spun că există o metodă Anulare pentru "Recordset".
Setări ADOConnection.Data [0] .Recordset.Cancel;
MSDN:
Anulați metoda
Anulează executarea unui apel în așteptare, prin metoda asincronă.
sintaxă
object.Cancel
Comentarii
Utilizați metoda Anulare pentru a termina un apel de metodă asincronă (adică o metodă invocată cu opțiunea adAsyncConnect, adAsyncExecute sau adAsyncFetch).
Da, am greșit. M-am uitat la metoda Anulare din TADODataSet
Aceasta moșteneste de la TDataSet, adică anulează modificările.
Și aici, de exemplu, la TADOCommand și Cancel este moștenit de la Recordset "a :)
Mulțumesc, acum este clar unde să săpat.