Criando campos Internalcalc X Calculated X Aggregate no Delphi


Calculated
Podemos criar um campo para calcular em memória valores como, por exemplo, quantidade x valor.
Os campos calculados são executados no evento OnCalcFields . Este evento é chamado a toda hora por exemplo quando um valor de um campo muda, mesmo que esse campo não afete o valor do cálculo o evento é disparado. Isto pode acarretar perda de performance, dependendo do processo, do tipo tão complexo que for o cargo, bem como dos dados a serem recalculados


Internalcalc

Ao utilizar InternalCalc ao invés de Calculated. No evento OnCalcFields, testamos se o estado (State) do DataSet é dsInternalCalc antes de fazermos o processamento que de fato interessa


Aggregate

Podemos criar um valor agregado, agrupado, somando com uma expressão agregada de SQL, isso mesmo, expressão agregada de SQL, SUM, AVG, MAX, MIN, ETC, porém não podemos fazer cálculos de Fields Calculated, mas sim de Fields InternalCalc, esta seria a diferença de um para o outro.


Vamos fazer o seguinte exemplo; 


1 - Selecione o TClientDataSet;
2 - Com o botão direito clique em Fields Editor + ( Ctrl + N)
Preencha os campo como a imagem abaixo (Campo calculado)

Preencha os campo como a imagem abaixo (Campo InternalCalc)

Criando um campo Aggregate
- Faça a seguinte configuração na imagem abaixo

Agora no CDS ative a propriedade AggregatesActive := True
Selecione o Field TotalAggregate e na propriedade Ative := True
Selecione o Field TotalAggregate e na propriedade Expression Sum(VALOR_HORA)

procedure TFSistema.CDSGenericoCalcFields(DataSet: TDataSet); begin CDSGenericoVALOR_CALCULADO.Value := CDSGenericoVALOR_HORA.Value * CDSGenericoHORAS.Value;
CDSGenericoVALOR_INTERNAL_CALC.Value := CDSGenericoVALOR_HORA.Value * CDSGenericoHORAS.Value; end; end;


0 comentários:

Postar um comentário