Il linguaggio di programmazione Delphi
 

Fermare una query (Firedac)

Daniele 3 Feb 2017 13:10
Ciao a tutti,
impostando una query molto lunga ho pensato di utilizzare il componente

TFDGUIxAsyncExecuteDialog

che permette, settando query.resourceoption.cmdExeMode:=amCancelDialog di
visualizzare un dialog con un bottone "cancel".
Premendo il bottone la query si interrompe.

Domanda, c'e' un modo per intercettare il click del bottone ??
Infatti premendo il bottone la query si interrompe e l'esecuzione del
programma passa alla linea successiva al query.acrive:=True, invece se ho
premuto il punsante non devo proseguire.

Ho provato a girami in giro ma, a parte soluzioni con parere discordanti,
non ho trovato ....

Ecco cosa ho trovato ...

http://stackoverflow.com/questions/15067960/anydac-form-design-programming-query-cancel-dialog
che contrasta con
http://stackoverflow.com/questions/14044428/how-to-keep-a-program-responsive-while-executing-anydac-query

Suggerimenti??

Grazie

Daniele
Alberto Salvati 3 Feb 2017 13:40
> Suggerimenti??

Hai provato a usare OnHide di TFDGUIxAsyncExecuteDialog?

A.
Daniele 3 Feb 2017 14:07
Ciao Alberto,

>> Suggerimenti??

> Hai provato a usare OnHide di TFDGUIxAsyncExecuteDialog?

Onestamente no.
Non per pigrizia ma, a logica, questo evento viene invocato quando il dialog
viene chiuso/nascosto.
E questo accade anche quando si chiude normalmente, alla fine della query.
Pero' c'e' un sender ..... domani guardo il sender .... potrebbe essere
diverso ....

A Domani

Ciao

Daniele
Daniele 6 Feb 2017 16:15
Ciao Alberto,

> Hai provato a usare OnHide di TFDGUIxAsyncExecuteDialog?
Ho provato a intercettare il tipo Sender nell'evento Onhide.
Sia che la query termini il suo lavoro o che venga interrotta con la
pressione del bottone, il sender e' sempre quello (Sender.ClassType).

Possibile che non ci sia un modo per avere questa informazione?

ciao

Daniele
Alberto Salvati 6 Feb 2017 17:27
> Sia che la query termini il suo lavoro o che venga interrotta con la
> pressione del bottone, il sender e' sempre quello (Sender.ClassType).

Il sender è sempre l'oggetto che solleva l'evento.
In questo caso presumo che il sender sia proprio la TFDQUery.

> Possibile che non ci sia un modo per avere questa informazione?

...non ti viene in mente proprio nulla su come capire come mai la kaz di dialog
è stata chiusa..?

A.
Daniele 7 Feb 2017 10:28
Ciao Alberto,

> Il sender è sempre l'oggetto che solleva l'evento.
> In questo caso presumo che il sender sia proprio la TFDQUery.
L'evento e' chiamato, sempre, da TFDGUIxAsyncExecuteDialog ottenuto andando
a consultare Sender.ClassType.

> ...non ti viene in mente proprio nulla su come capire come mai la kaz di
> dialog è stata chiusa..?
Onestamente no, tieni presente la scarsa preparazione tecnica ....
sicuramente mi sfugge qualcosa ....

Grazie

Ciao

Daniele
Daniele 7 Feb 2017 11:47
Ciao Alberto,

il pezzo di codice per la query e'

FDB.FQR1.SQL.Add(QueryStr);
FDB.FQR1.Active:=True;

if FDB.FQR1.Command.State=csAborting then <<---- usata solo per prova
... e qui c'e' un break point
begin
Sleep(1);
end;

Qui succede un fatto curioso ....
se la query viene eseguita in modo corretto (senza cancellare il processo)
il break point viene rispettato.
Se invece clicco sul bottone del dialog, la query si interrompe ma non si
passa piu' di li, nel senso che non so cosa succede.
Il controllo torna alla form ma si esce dalla procedura e, mio limite, non
so dove ritorna.

Lo stu***** continua ....

Ciao

Daniele

Links
Giochi online
Dizionario sinonimi
Leggi e codici
Ricette
Testi
Webmatica
Hosting gratis
   
 

Il linguaggio di programmazione Delphi | Tutti i gruppi | it.comp.lang.delphi | Notizie e discussioni delphi | Delphi Mobile | Servizio di consultazione news.