PDA

Visualizza la versione completa : [Delphi] -- Media di campi autocalcolati


Mat24
20-03-2004, 13:59
Salve ragazzi,
ho una tabella con un campo autocalcolato, in particola supponendo che i campi della tabella sono a,b,c,d e d è il campo in questione ho d = (a+ b)*c. Mi servirebbe la media del campo d. Ho provato attraverso una query, ma non riesco ad ottenere il valore....è come se non trovasse il campo in questione (Presumo dipenda dal fatto che il campo è autocalcolato). Qualcuno saprebbe darmi una mano... :bhò: ...grazie tanto.. :tongue: ...ciao.

alka
20-03-2004, 15:07
Non è possibile ottenere il valore aggregato che desideri attraverso una query, poichè lo statement SQL che la costituisce viene eseguita sul database server o comunque usando il driver per database...ma il campo calcolato sul quale devi basare la tua elaborazione non appartiene nativamente alla struttura del DB...ma dal tuo messaggio vedo che questo lo hai capito anche tu.

Purtroppo, credo che l'unica soluzione sia quella di scandirsi la tabella e, per ciascun campo calcolato, eseguire la somma per dividerla successivamente per il numero di record reperiti, a meno che tu non abbia a disposizione una base dati - che non hai specificato - in grado di supportare i campi calcolati all'interno della struttura del DB.

Magari scrivi con maggiore precisione gli strumenti che utilizzi; ad esempio, accedi al DB attraverso il motore BDE? con quali componenti (TTable, TQuery...)? che formato di database usi?

Forse c'è modo di trovare qualche soluzione più pulita.

Ciao! :ciauz:

Mat24
20-03-2004, 21:27
Ciao Alka,
innanzittutto grazie per la tua gentile disponibilità.. :tongue:
Hai ragione non sono stato molto chiaro nel messaggio.. :D ...
Ora provvedo a chiarire la mia situazione:

-Accesso al db attraverso motore BDE e utilizzo tabelle paradox
-Gli oggetti utilizzati sono : TTable, TDataSourse(Per visualizzare i dati in una DBGrid, ma credo non sia importante) e TQuery per effettuare la query in questione.

Spero di essere stato abbastanza chiaro.. :confused:
Ciao a presto.

alka
21-03-2004, 03:37
Sei stato chiaro. La richiesta di informazioni aggiuntive era necessaria per suggerire eventuali soluzioni.

Purtroppo, rimango dell'idea che ho già espresso nel messaggio precedente... :)

Credo che la cosa migliore sia quella di calcolare il valore all'interno di Delphi. Usando BDE e Paradox, potresti utilizzare direttamente la TTable o la TQuery che usi per visualizzare i dati (in una griglia?), scandendola al momento dell'apertura (o quando vengono modificati i dati) per calcolare il valore della media.

Per navigare all'interno di Query e Table (sono entrambi dei DataSet) puoi usare i metodi First, Last, Eof, Bof, Next e così via.

L'effetto collaterale che otterresti sarebbe quello di vedere la griglia scorrere mentre il tuo codice esplora i dati per calcolare la media, poichè la griglia è associata - tramite il TDataSource - al DataSet, query o tabella che sia.

Per evitare questo effetto, che ha anche lo svantaggio di rallentare le operazioni, potresti richiamare il metodo DisableControls della query o tabella per inibire l'aggiornamento dei Data Control associati, effettuare la scansione dei record dal primo all'ultimo estraendo i valori del campo calcolato e facendo la media, richiamando alla fine del processo il metodo EnableControl per ripristinare l'aggiornamento dei controlli visuali associati alla tabella dati.

Spero ti bastino queste indicazioni teoriche, perchè non ho purtroppo il tempo di produrre esempi codificati, ma sulla Guida trovi altre informazioni sulle classi, sui metodi e le proprietà citati.

Ciao! :ciauz:

Mat24
21-03-2004, 12:06
Si mi bastano sei stato chiarissimo!!!... ;)
Anche io avevo pensato ad una soluzione di questo tipo...l'unica cosa di cui ho paura è che in questo modo il codice diventi particolarmente "pesante" quando i record in tabella sono molti.. :confused: ...Comunque più tardi implemento questa via e poi ti faccio sapere.
Ti ringrazio...ciao M. :ciauz:

Loading