2012-05-08 14 views
6

¿Es posible agregar un campo agregado sobre un campo calculado?Agregando un campo calculado en TClientDataset

Supongamos que hay un CD con los siguientes campos:

  • ID (incremento automático)
  • Nombre (cadena)
  • Precio (float)
  • Cantidad (número entero)
  • total (enteros) - campo calculado - Precio * Cantidad

y quiero agregar un agregar para obtener la suma de la columna Total. ¿Es posible?

Respuesta

5

Sí, eso es posible si cambia el campo calculado a un campo InternalCalc. El cálculo aún se realiza en el evento OnCalcFields, pero debe verificar el estado de InternalCalc cuando realiza el cálculo para ese campo.

+0

¿Qué pasa con ['aggregate fields'] (http://edn.embarcadero.com/article/29272)? Ellos parecen ser mejores para este propósito. – TLama

+3

@TLama, por supuesto, puede crear un campo agregado con SUM (Precio * Cantidad), pero la pregunta era cómo hacer un agregado sobre un campo calculado. Esto solo funcionará si el campo calculado tiene FieldKind = fkInternalCalc. –

+3

Principalmente es la secuencia de evaluación: los campos InternalCalc se califi can antes de agregar y clasificar, por lo que se pueden usar en forma de agregados y como índice. Los campos calculados se evalúan después de eso. Los campos InternalCalc solo se admiten en TClientDataSets. –

Cuestiones relacionadas