logotipo Blog Giovani Da Cruz
Delphi

Campos agregados em Delphi com FDMemTable e ClientDataSet

3 min de leitura · publicado em 24/08/2025 136 visualizações
Aggregate Fields in Delphi

No desenvolvimento de sistemas, muitas vezes precisamos obter totais, médias, contagens ou máximos/mínimos diretamente a partir de datasets em memória. Felizmente, tanto o TFDMemTable (FireDAC) quanto o TClientDataSet suportam campos agregados (Aggregate Fields), que permitem realizar cálculos automaticamente sem precisar percorrer manualmente os registros.

Neste artigo, vamos mostrar como criar e utilizar campos agregados em Delphi, com exemplos práticos.

 

🔹 O que é um campo agregado?

Um campo agregado é um campo calculado automaticamente pelo dataset com base em uma expressão, como:

  • SUM(VALOR) → soma de todos os valores
  • AVG(VALOR) → média dos valores
  • COUNT(*) → quantidade de registros
  • MIN(VALOR) → menor valor
  • MAX(VALOR) → maior valor

Ele funciona em tempo real: sempre que os dados do dataset são alterados, o campo agregado é atualizado.

 

Exemplo com FDMemTable

O TFDMemTable é muito usado em projetos modernos por ser rápido e flexível. Vamos criar um dataset em memória, adicionar registros e configurar um campo agregado.

Criando um campo agregado em tempo de design

  1. Adicione um TFDMemTable ao formulário.
  2. Clique com o botão direito nele → Fields EditorAdd All Fields.
  3. No Fields Editor, clique com o botão direito → New Field.
    • Name: TotalValor
    • Type: Currency
    • Field Type: Aggregate
    • Expression: SUM(VALOR)
  4. No código, basta ativar as agregações:
FDMemTable1.AggregatesActive := True;
ShowMessage('Total: ' + CurrToStr(FDMemTable1.FieldByName('TotalValor').AsCurrency));

Criando o campo agregado em tempo de execução

FDMemTable1.Active := False;
FDMemTable1.FieldDefs.Clear;
FDMemTable1.FieldDefs.Add('VALOR', ftCurrency);
FDMemTable1.CreateDataSet;

// Inserindo alguns valores
FDMemTable1.AppendRecord([100]);
FDMemTable1.AppendRecord([200]);
FDMemTable1.AppendRecord([150]);

// Criando campo agregado em tempo de execução
with TAggregateField.Create(FDMemTable1) do
begin
  FieldName := 'TotalValor';
  FieldKind := fkAggregate;
  DataSet := FDMemTable1;
  Expression := 'SUM(VALOR)';
end;

FDMemTable1.AggregatesActive := True;

ShowMessage('Total: ' + CurrToStr(FDMemTable1.FieldByName('TotalValor').AsCurrency));

 

Exemplo com ClientDataSet

O TClientDataSet também suporta agregados, e sua configuração é muito parecida.

Criando um campo agregado em tempo de design

  1. Adicione um TClientDataSet ao formulário.
  2. Abra o Fields Editor e crie os campos normalmente.
  3. Crie um campo agregado:
    • Name: TotalValor
    • Type: Currency
    • Field Type: Aggregate
    • Expression: SUM(VALOR)
  4. No código:
ClientDataSet1.AggregatesActive := True;
ShowMessage('Total: ' + CurrToStr(ClientDataSet1.FieldByName('TotalValor').AsCurrency));

Criando o campo agregado em tempo de execução

ClientDataSet1.Close;
ClientDataSet1.FieldDefs.Clear;
ClientDataSet1.FieldDefs.Add('VALOR', ftCurrency);
ClientDataSet1.CreateDataSet;

// Inserindo valores
ClientDataSet1.AppendRecord([50]);
ClientDataSet1.AppendRecord([75]);
ClientDataSet1.AppendRecord([125]);

// Campo agregado criado em runtime
with TAggregateField.Create(ClientDataSet1) do
begin
  FieldName := 'TotalValor';
  FieldKind := fkAggregate;
  DataSet := ClientDataSet1;
  Expression := 'SUM(VALOR)';
end;

ClientDataSet1.AggregatesActive := True;

ShowMessage('Total: ' + CurrToStr(ClientDataSet1.FieldByName('TotalValor').AsCurrency));

 

🔹 Conclusão

Os campos agregados em FDMemTable e ClientDataSet são uma forma prática de simplificar cálculos diretamente no dataset, sem necessidade de percorrer registros manualmente.

Eles são ideais para exibir totais em relatórios, somatórios em grids ou estatísticas rápidas.

👉 Em vez de gastar linhas de código para somar, basta configurar um campo agregado e deixar o Delphi fazer o trabalho!

 

 

📌 E você, já usa campos agregados no Delphi?

Em que situações eles ajudam mais no seu projeto?

Deixe seu comentário!

 

 

#Delphi, #ProgramacaoDelphi, #FireDAC, #BancoDeDados, #DesenvolvimentoDelphi, #SQL,

#DesenvolvimentoDeSoftware #GiovaniDaCruz

#Programadores, #DevLife, #DelphiTips, #CodeLife, #Developer, #Programacao, #DelphiDevelopers

 #DicasDelphi, #DelphiBrasil, #ComunidadeDelphi

 

 

Deixe um comentário

Seu e-mail não será publicado.