Newsgroup: it.comp.lang.delphi
Titolo: Query passata come property

Nell'ambito di una applicazione, ho un form che si occupa di offrire 
all'utente uno strumento per ricerche di vario genere. Il form include un 
componente TQuery che viene usato per interrogare un dataset in vari modi. 
Tutti i campi del dataset sono dichiarati persistenti e ce ne sono alcuni 
calcolati ricorrendo anche a dataset collegati.
Lo stesso congegno è duplicato altrove, ospitato in un datatModule.
Volevo quindi sbarazzarmi del componente nel form delle ricerche (li, per 
ragioni storiche), ma, per altre ragioni, non volevo includere il 
riferimento al dataModule.
 
Che ne dite della soluzione di passare al form ricerche il dataset 
dichiarato nel DataModule, inserendo nel form ricerche una property così:
 
private
  fQMovim: TQuery;
public
  property QMovim: TQuery read fQMovim write fQMovim;
 
Chiedo commenti e consigli. Grazie
 
 
 

 Lo stesso congegno č duplicato altrove
 
Rendi ogni form autonoma,separando le logiche di business e mantenendo 
il tuo software disaccoppiato e ben coeso.
 
Il form delle ricerche **sa** che ricerche fare e come, č inutile che lo 
rendi accessibile in scrittura da tutti esponendo la tquery come 
property R/W.
 
Se le logiche di ricerca sono duplicate altrove e cambiano di pochi 
particolari, puoi aggregarle nel form ricerche in modo mirato, randendo 
il suo comportamento differente in funzione di alcuni flag che passerai.
 
-- 
Morde

Rendi ogni form autonoma,separando le logiche di business e mantenendo
il tuo software disaccoppiato e ben coeso.
Morde
 
Ma è proprio tentando di rispondere a questa pratica che volevo togliere dal 
form ricerche il riferimento a un dataModule pieno di altri dataset che non 
gli servono e passargli il riferimento a un dataset esterno.. Come posso 
fare altrimenti quello che tu dici ? 
 

 Come posso fare altrimenti quello che tu dici ?
Allora stai facendo giusto, continua su questa strada.
 
PS: i tuoi followups sono privi di quoting, cerca di sistemare perchè 
sono spesso illeggibili -non si capisce quando scrivi tu e quando 
l'altro cui stai rispondendo-
 
-- 
Morde

Ciao Stark,
   hai il tuo datamodule che ha un nome (DM1) ed e' contenuto in una unit 
(Unit_DataModule.Pas).
all'interno del tuo DM1 c'e' un componente TQuery (Movim), oltre a chissa' 
cos'altro.
 
Nella tua form di ricerca devi solo mettere nelle uses la  Unit_DataModule e 
poi usare quello che ti serve, per esempio
 
DM1.Movim.Sql.Clear;
DM1.Movim.Sql.Add('Select * from MyTable where .....');
DM1.Movim.Active:=True;
 
Come ha indicato Morde, nella form di ricerca tu sai quello che devi fare e 
(a colpi di flag) costruisci la tua query.
 
Se poi il  tuo datamodule ha 100 componenti (tra tutti) nulla ti vieta di 
crearti piu' dataset ognuno dei quali ha il suo Tquery.
A titolo personale, piu' e' separato ..... meglio e' !!
 
Ciao
 
Daniele
 
 
 
 

"Daniele"  ha scritto nel messaggio news:nvkcaq$okb$1...@gioia.aioe.org...

--
Vuoi dire 'più datamodule' ?
Nel mio caso, nel dataModule che avrei dovuto inserire negli uses ho anche 
tutte le proc connesse ai vari dataset che hanno un certo livello di 
generalizzazione. Pertanto mi pareva inutile e pesante inserirlo e inoltre 
volevo eliminare qualsiasi dipendenza da altri moduli. Mi pareva che 
trasmettendo alla form ricerche il dataset da usare tramite una property 
raggiungessi proprio questo obiettivo.
 
 
 

On Friday, 4 November 2016 10:02:44 UTC, Morde  wrote:
 
[...]
Inutile dargli consigli: alla fine fara` comunque a modo suo.

Inutile dargli consigli: alla fine fara` comunque a modo suo.
---
Questo non è vero. Data la mia debolezza tecnica, a volte non so applicarli 
i consigli, ma cerco di farlo 
 

 raggiungessi proprio questo obiettivo.
 
Quello che io seguo, e forse anche gli altri, e' definire solo i  vari 
componenti nel form/unit che contiene tutti i componenti per gestire i dati.
Poi nella form (o piu' form) di ricerca includo nelle uses la form/unit dove 
risiede il datamodule che devo utilizzare e poi il codice necessario per le 
ricerche.
Come vedi ho separato tutto, unit datamodule (il piu' pulito in assoluto con 
zero linee di codice, se non strettamente necessario) e unit/form di 
ricerca, domani in caso di manutenzione sulla ricerca lavoro solo su quella 
form senza toccare nulla di altro.
Non e' detto che tenere tutto separato sia la strategia migliore, pero' 
aiuta.
 
Nel tuo caso, se vuoi seguire questa filosofia, c'e' da lavorare non poco 
perche' il codice nella unit del datamodule lo devi spostare (con le 
modifiche del caso) nella form di ricerca.
Prima o poi questo passo lo devi fare; tieni presente che questo ng e' 
seguito da personaggi che hanno un'esperienza piu' che decennale in questo 
campo (evidentemente non io) e si deve far tesoro dei loro suggerimenti.
Questo significa che se devi riscrivere una paccata di codice per rendere 
tutto piu' performante, leggibile, mantenibile, questo devi fare; oggi ti 
sembrera' tempo perso, ma domani sara' tutto piu' facile.
 
Come sempre, buona giornata e buon lavoro
 
Ciao
 
Daniele
 
 

Quello che io seguo, e forse anche gli altri, e' definire solo i  vari
componenti nel form/unit che contiene tutti i componenti per gestire i dati.
Poi nella form (o piu' form) di ricerca includo nelle uses la form/unit dove
risiede il datamodule che devo utilizzare e poi il codice necessario per le
ricerche.
Come vedi ho separato tutto, unit datamodule (il piu' pulito in assoluto con
zero linee di codice, se non strettamente necessario) e unit/form di
ricerca, domani in caso di manutenzione sulla ricerca lavoro solo su quella
form senza toccare nulla di altro.
Non e' detto che tenere tutto separato sia la strategia migliore, pero'
aiuta.
 
Nel tuo caso, se vuoi seguire questa filosofia, c'e' da lavorare non poco
perche' il codice nella unit del datamodule lo devi spostare (con le
modifiche del caso) nella form di ricerca.
Prima o poi questo passo lo devi fare; tieni presente che questo ng e'
seguito da personaggi che hanno un'esperienza piu' che decennale in questo
campo (evidentemente non io) e si deve far tesoro dei loro suggerimenti.
Questo significa che se devi riscrivere una paccata di codice per rendere
tutto piu' performante, leggibile, mantenibile, questo devi fare; oggi ti
sembrera' tempo perso, ma domani sara' tutto piu' facile.
 
Come sempre, buona giornata e buon lavoro
 
Ciao
 
Daniele
---
Ti ringrazio molto per i consigli che riconosco sono molto sensati, tanto 
che ho cercato di lavorare proprio in vista dell'obiettivo della separatezza 
dei compiti. Naturalmente, mi trovo con un arretrato con il quale fare i 
conti e che cerco di aggiustare man mano.
Il form ricerche ora non ha più nessun legame con altre units. L'unico 
vincolo sono i dataset: Il principale è quello che viene interrogato con 
delle query, e altri due o tre dataset di riferimento con i quali a volte 
devo completare i dati delle query.
Poichè il form ricerche è richiamato da un' altra unit, ho pensato di 
spostare questi dataset in questa unit che al momento del lancio del form 
ricerche gli passa i riferimenti. Non è nella linea del 'separare' questo ? 
(avevo dei dubbi, per questo ho chiesto pareri..).
Potrei mettere questi dataset in un datamodule specifico per il form 
ricerche ? Ma si possono aver più dataModule ?
Ecco, più ci penso, più domande mi vengono ...
 
 
 
 

 Ecco, più ci penso, più domande mi vengono ...
Credo che tu non sia l'unico ..... tutti noi abbiamo molte domande ..... ma 
non possiamo intasare l'NG !!!
 
Ciao
 
Daniele