Newsgroup: it.comp.lang.delphi
Titolo: Solo per Guru

Sto cercando di visualizzare in un controllo ProgressBar l'avanzamantto
dell'esecuzion di una Query. Uso per le query un componente TAdoQuery, e mi
connetto al database tramite un controllo TAdoConnection.
Ho trovato sull'help di Delphi 5 qualche cosa che mi sembrava utile, e cioč
catturare l'evento OnFetchProgress ed eseguire il seguente codice
procedure TForm1.ADOQuery2FetchProgress(DataSet: TCustomADODataSet;
  Progress, MaxProgress: Integer; var EventStatus: TEventStatus);
begin
  Caption := 'Percent complete: ' +
  IntToStr(Trunc(Progress / MaxProgress * 100)) + '%';
  Application.ProcessMessages;
  progressbar1.Max:=MaxProgress;
  progressbar1.position:=PROGRESS;
  Application.ProcessMessages;
end;
Ma sembra che l'evento OnFetchProgress non si verifca mai. O, io non son
quando dovrebbe verificarsi, in quali circostanze speciali. Sull'help non
trovo indicazioni utili. L'help dice solo che si verifica quando vengono
prelevati i dati di una query.
Qualcuno puň aiutarmi?
Franz

Qualcuno può aiutarmi?
L'evento OnFetchProgress viene chiamato SOLO su query in modalita'
asincrona. E' questo il tuo caso?
Ciao.
--
"La velocità luce non è sufficente Comandante Nunziatella, 
dobbiamo passare alla velocità smodata!"

> Qualcuno può aiutarmi?
Hai già avuto le risposte quando hai postato in inglese.... Ricordi?
Qualche thread più indietro... e lo trovi! 
Acqua
PS: Per favore una subjects più idonei. 
----------------------------------------------------
Download new version of PixExperts for Delphi 6 at
http://www.salexander.supereva.it/Pix_Exp171D6.zip
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Guru Meditation #84010007.00C13870
.
.
.
.
.
.
Here there aren't delphi gurus, only friends. Remember.
-- 
Morde. 
(morde at programmer dot net)

 connetto al database tramite un controllo TAdoConnection.
[CUT]
Ti suggerisco la prossima volta di mettere un subject più significativo. E
non è detto che solo un "guru" sappia risponderti: magari uno meno "guru" ha
appena risolto il tuo stesso problema...
Ciao
Matteo

 asincrona. E' questo il tuo caso?
Non credo.  Che cos'è una query in modalità asincrona?


Era un modo ironico di chiedere un consiglio. Chiedo scusa se qualcuno si
sia sisentito.

> Here there aren't delphi gurus, only friends. Remember.
I know. Pero' ancora non riesco a risolvere il problema. E non so se sia
risolvibile.


Lo so, il mio era una provocazione scherzosa. Non intendevo offendere
nessuno, ne sminuire le vostre competenze. Altrimenti non mi sarei rivolto
in qesto newsgroup.


Non credo equivale a un no :-)
Una query asincrona, come dice il nome, viene eseguita in modo non
sincrono, ossia, una volta  chiamato il metodo Execute, il thread non
si ferma ad aspettare che sia stata completata.
Proprio per fare in modo che *comunque* si sia in grado di sapere se
la query e' terminata o a quale punto sia, sono vi sono degli eventi
appositi (OnFetchProgress, OnFetchComplete).
In una situazione di query sincrona (quindi con il thread che resta in
attesa che la query sia terminata) questi eventi non sono disponibili.


 attesa che la query sia terminata) questi eventi non sono disponibili.
Ti ringrazio per le spiegazioni. Come faccio a creare un query asincrona?
Franz

 prelevati i dati di una query.
A naso l'vento si verifica se prelevi dati dalla query non se la query
preleva dati dal database
--
_________________________________________
Edmondo Di Tucci snar...@Ttin.it
guarda i miei lavori su: 
www.powernetsi.it/edmondo

 Ti ringrazio per le spiegazioni. Come faccio a creare un query asincrona?
procedure TForm1.Button1Click(Sender: TObject);
begin
gauge1.Progress:=0;
AdoQuery1.ExecuteOptions:=[eoAsyncFetch];
AdoQuery1.Active:=True;
end;
procedure TForm1.ADOQuery1FetchProgress(DataSet: TCustomADODataSet;
  Progress, MaxProgress: Integer; var EventStatus: TEventStatus);
begin
Gauge1.Progress:=Trunc(Progress / MaxProgress * 100);
Application.ProcessMessages;
end;
Ciao :-)

"MG" <M...@xx.xx> ha scritto nel messaggio
news:Xns93C07075A26ECga...@193.70.192.192...

Ora lo provo e ti faccio sapere.
Grazie per la tua gentilezza.
Franz

"MG" <M...@xx.xx> ha scritto nel messaggio
news:Xns93C07075A26ECga...@193.70.192.192...

Ciao, ho provato con le modifiche da te suggerite, ma l'evento FetchProgress
non si verifica mai. Sono andato sul sito della Microsoft, ed ho letto che
tale evento si verifica con query che restituiscono un grande numero di
righe. Quanto grande?
Francesco

 restituiscono un grande numero di righe. Quanto grande?
Guarda non saprei, l'unica cosa che ti posso dire è che ho provato per 
vedere che succedeva e con una query di un 2000/3000 righe vedo la barra 
del percento scorrere molto molto velocemente [ma scorre!].
In sostanza a me l'evento si verifica :-)
Le condizioni di contorno del mio test:
MSSQL
Delphi 7
altro non so dirti ;)
ciao

 ciao
Boh! Io sto provando con Delphi 5 e con Access 2000. E con una tabella di
35.000 record. Ma il coso non si muove. A proposito, ora provo a trasferire
i dati in un database MySQL, per vedere cosa succede
Ciao,
Franz

 Boh! Io sto provando con Delphi 5 e con Access 2000. 
In serata faccio qualche prova a casa con D5 poi ti dico, domanda scontata: 
hai fatto tutti gli upgrade del delphi 5 - Ado e compagnia bella ? ;)

"MG" <M...@xx.xx> ha scritto nel messaggio
news:Xns93C0A94CA8E2Bga...@193.70.192.192...

Risposta scontata;- ) No :))))  Non li ho fatti, dove li trovo, sul sito
della Borland? O devo cercare sul sito della Microsoft? I nuovi ADO non
vengono installati con Internet Explorer 6?
Franz

 della Borland?
http://info.borland.com/devsupport/delphi/downloads/index.html
inoltre ho fatto delle prove con D5+access2000 record circa 9000 e funge.
dimenticavo ma credo sia ininfluente che ho collegato la query a un 
datasource e il datasource a una dbgrid.
ho installato gli update naturalmente.
ciao.
se hai D5 enterprice ti posso mandare un file zip che li contiene entrambi.
se ti interessa scrivimi 
a:gae...@despammed.com
altrimenti scaricali tu ;)

"MG" <M...@xx.xx> ha scritto nel messaggio
news:Xns93C0BFA6C58A0ga...@194.185.88.6...

Ti ringrazio, sei molto gentile. Io ho appena scaricato Delphi 5 Enterprise
Pack, ma non so se sono quelli che intendevi tu. Ora provo ad installarli, e
poi ti faccio sapere.
Ciao,
Franz

 Enterprise 
prego devi scaricare anche ADOexpress update pack
ciao

.
[...]
...Good ol' Amiga! ;)
Ciao!
Peppe
_____
ICQ #9759626
Togli levaccà per contattarmi via email.

> Togli levaccà per contattarmi via email.
Cu un lu voli sapiri u sapi ca sì siscilianu... :DDDDD
E pensare che sei anche un mio collega...... NOOOOOOOOOOOOOOOOOOOOOOOO!!!!!!
:DDDDDD
Acqua

...Good ol' Amiga! ;)
eh eh eh.... ;)


:DDDDDD
...ma guarda un po': anche tu conosci il siciliano?!?! Chissà come
mai! ;)))
Ciaooo!
Peppe
_____
ICQ #9759626


"MG" <M...@xx.xx> ha scritto nel messaggio
news:Xns93C0C71F7DEC6ga...@194.185.88.6...

Ho risolto il problema installando Delphi 6. Ora funziona, ma lo stato di
avazamento della query sulla progressbar non viene visualizzata in sincronia
con l'esecuzione  della query, ma viene visualizzato tutto in una volta alla
fine dell'esecuzione. E non ho modificato il tuo codice.
Franz

 codice. 
Il comportamento che ottengo io è questo:
avanza quasi istantaneamente fino al 90% poi il restante non in maniera 
sincrona ma progressiva.
Ripeto che ho fatto test con max 9000 record e non ho mai usato prima d'ora 
qualcosa di simile.
Senti ma se hai una query che necessita di una barra di scorrimento sei 
sicuro che stai proprio proprio facendo tutto nel modo migliore ? :-)

 sicuro che stai proprio proprio facendo tutto nel modo migliore ? :-)
Questa non l'ho capita! :-)
Intendi dire: a che serve una barra di scorrimento che visualizza l'avanzare
dell'esecuzione di una query?
Risposta: a niente, ma a me piace sperimentare cose che non so fare, ed
imparare cose nuove
A proposito, secondo te, perchè se uso dei componenti ADO per leggere gli
stessi dati da una tabella di un databas Access, la query per visualizzare
tuti i dati viene eseguita quasi istantaneamente, e poi invece, se gli
stessi dati li vado a leggere da una tabella di un database MySQL, sempre
tramite ADO ma usando i driver MyODBC, la query di selezione viene eseguita
in due secondi?
Saluti,
Franz

 
Non saprei ma xchè non usi l'OLEProvider invece che il driver ODBC (lo 
trovi sul sito di MySQL naturalmente)
Ciao


Se parli di MyOLEDB Provider v3.0, l'ho scaricato e provato, ma ora la query
ci impiega piů di due minuti per selezionare i dati.
Franz

sbagliando qualcosa a livello di progetto. Tutto qui.
Beh questo e' opinabile :) dipende dalla base dati e dalle
informazioni di cui hai bisogno.
