2012-05-08 31 views
6

È possibile aggiungere un campo aggregato su un campo calcolato?Aggregazione di un campo calcolato in TClientDataset

Supponiamo che ci sia un cd con le seguenti campi:

  • ID (autoincrement)
  • Nome (stringa)
  • Prezzo (float)
  • Quantità (intero)
  • totale (interi) - campo calcolato - Prezzo * Quantità

e voglio aggiungere un aggregare per ottenere la somma della colonna Totale. È possibile?

risposta

5

Sì, ciò è possibile se si modifica il campo calcolato in un campo InternalCalc. Il calcolo viene comunque eseguito nell'evento OnCalcFields, ma è necessario verificare lo stato di InternalCalc quando si esegue il calcolo per quel campo.

+0

Che dire di ['campi di aggregazione'] (http://edn.embarcadero.com/article/29272)? Sembrano essere migliori per questo scopo. – TLama

+3

@TLama, ovviamente puoi creare un campo aggregato con SUM (Prezzo * Quantità), ma la domanda era come creare un aggregato su un campo calcolato. Funzionerà solo se il campo calcolato ha FieldKind = fkInternalCalc. –

+3

È principalmente la sequenza di valutazione: i campi InternalCalc vengono calibrati prima dell'aggregazione e dell'ordinamento, quindi possono essere utilizzati negli aggregati e come indice. Successivamente vengono calcolati i campi calcolati. I campi InternalCalc sono supportati solo in TClientDataSets. –