2012-05-08 22 views
6

Czy istnieje możliwość dodania pola zbiorczego nad polem obliczonym?Agregacja pola obliczeniowego w TClientDataset

Załóżmy, że istnieje płyty z następujących dziedzin:

  • ID (autoincrement)
  • Nazwa (string)
  • Cena (float)
  • Ilość (całkowita)
  • całkowita (Integer) - pole obliczeniowe - Cena * Ilość

i chcę dodać agregate, aby uzyskać sumę kolumny Total. Czy to możliwe?

Odpowiedz

5

Tak, jest to możliwe, jeśli zmienione pole obliczeniowe zostanie zmienione na pole InternalCalc. Obliczenia są nadal wykonywane w zdarzeniu OnCalcFields, ale podczas wykonywania obliczeń dla tego pola należy sprawdzić stan dla InternalCalc.

+0

Co z ['polami zbiorczymi'] (http://edn.embarcadero.com/article/29272)? Wydaje się, że są lepsze w tym celu. – TLama

+3

@ TLama, oczywiście możesz utworzyć pole agregatów z SUM (Cena * Ilość), ale pytanie było jak zrobić agregację ponad polem obliczeniowym. To zadziała tylko wtedy, gdy pole obliczeniowe ma FieldKind = fkInternalCalc. –

+3

Jest to głównie kolejność oceny: pola InternalCalc są pobierane przed agregacją i sortowaniem, aby mogły być używane w agregatach i jako indeks. Obliczone pola są następnie oceniane. Pola InternalCalc są obsługiwane tylko w TClientDataSets. –