2012-05-08 23 views
6

Kann ein Aggregatfeld über ein berechnetes Feld hinzugefügt werden?Aggregieren eines berechneten Felds in TClientDataset

Angenommen, es ist ein cds mit folgenden Feldern:

  • ID (Autoincrement)
  • (String)
  • Preis (float)
  • Menge (integer)
  • Gesamt (integer) - berechnetes Feld - Preis * Menge

und ich möchte ein hinzufügen aggregieren, um die Summe der Gesamtspalte zu erhalten. Ist es möglich?

Antwort

5

Ja, das ist möglich, wenn Sie das berechnete Feld in ein InternalCalc-Feld ändern. Die Berechnung wird weiterhin im OnCalcFields-Ereignis durchgeführt, aber Sie müssen den Status für InternalCalc überprüfen, wenn Sie die Berechnung für dieses Feld durchführen.

+0

Was ist mit ['aggregierten Feldern'] (http://edn.embarcadero.com/article/29272)? Sie scheinen für diesen Zweck besser zu sein. – TLama

+3

@TLama, natürlich können Sie ein Summenfeld mit SUM (Preis * Menge) machen, aber die Frage war, wie man ein Aggregat über ein berechnetes Feld macht. Dies funktioniert nur, wenn das berechnete Feld FieldKind = fkInternalCalc hat. –

+3

Es ist hauptsächlich die Reihenfolge der Auswertung: InternalCalc Felder werden vor dem Aggregieren und Sortieren berechnet, so dass sie in Aggregaten und als Index verwendet werden können. Berechnete Felder werden danach ausgewertet. InternalCalc-Felder werden nur in TClientDataSets unterstützt. –