Advertisement
filhotecmail

AggregatesRuntime

Feb 12th, 2018
338
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 4.24 KB | None | 0 0
  1. unit AggregateRuntime
  2.  
  3. uses DBclient,
  4. Vcl.StdCtrls,sysutils,
  5.      FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param,
  6.      FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt,
  7.      FireDAC.Comp.DataSet, FireDAC.Comp.Client,DB;
  8.  
  9.  Type
  10.   TypeAggregateERROR = class(Exception);
  11.  
  12. TAggregateRetorne = (ftSomar,ftMaxima,ftContar,FtMedia);
  13.  
  14. TOperacoes =class
  15.    class function  Retornar(Dataset: TFDquery;
  16.                    const cField: String; Tipo: TAggregateRetorne): Currency; overload;
  17.    class function  Retornar(Dataset: TClientDataset;
  18.                    const cField: String; Tipo: TAggregateRetorne): currency; overload;              
  19.                    
  20.   end;
  21.  
  22. class function TOperacoes.Retornar(Dataset: TFDquery;
  23.                    const cField: String; Tipo: TAggregateRetorne): currency;
  24.  begin
  25.  try
  26.     with Dataset do
  27.       begin
  28.         AggregatesActive := False;
  29.          if Aggregates.FindAggregate('Somar') = nil then
  30.            with Aggregates.Add do
  31.             begin
  32.               Expression := 'Sum('+cField+')';
  33.               Name := 'Somar';
  34.               Active := True;
  35.             end;
  36.          if Aggregates.FindAggregate('Maxima') = nil then
  37.             with Aggregates.Add do
  38.              begin
  39.                Expression := 'Max('+cField+')';
  40.                name := 'Maxima';
  41.                Active := True;
  42.              end;
  43.          if Aggregates.FindAggregate('Contar') = nil then
  44.             with Aggregates.Add do
  45.              begin
  46.                Expression := 'Count('+cField+')';
  47.                name := 'Contar';
  48.                Active := True;
  49.             end;
  50.          if Aggregates.FindAggregate('Media') = nil then
  51.             with Aggregates.Add do
  52.              begin
  53.                Expression := 'Avg('+cField+')';
  54.                name := 'Media';
  55.                Active := True;
  56.             end;
  57.          AggregatesActive := true;
  58.           case Tipo of
  59.             ftSomar:result:=Aggregates.FindAggregate('Somar').Value;
  60.             ftMaxima:result:=Aggregates.FindAggregate('Maxima').Value;
  61.             ftContar:result:= Aggregates.FindAggregate('Contar').Value;
  62.             FtMedia:result:= Aggregates.FindAggregate('Media').Value;
  63.           end;
  64.        end;
  65.  except
  66.   on e:Exception do
  67.     raise TypeAggregateERROR.Create(
  68.                     'Erro na passagem de parâmetros'+sLineBreak+
  69.                    'ou confira se o DataSet esta Ativo');//propagar a exceção
  70.    
  71.    end;
  72.  end;    
  73.  
  74. class function TOperacoes.Retornar(Dataset: TClientDataset; const cField: String; Tipo: TAggregateRetorne): currency;
  75.  begin
  76.  try
  77.     with Dataset do
  78.       begin
  79.         AggregatesActive := False;
  80.          if Aggregates.Find('Somar') = nil then
  81.            with Aggregates.Add do
  82.             begin
  83.               Expression := 'Sum('+cField+')';
  84.               AggregateName := 'Somar';
  85.               Active := True;
  86.             end;
  87.          if Aggregates.Find('Maxima') = nil then
  88.             with Aggregates.Add do
  89.              begin
  90.                Expression := 'Max('+cField+')';
  91.                AggregateName := 'Maxima';
  92.                Active := True;
  93.              end;
  94.          if Aggregates.Find('Contar') = nil then
  95.             with Aggregates.Add do
  96.              begin
  97.                Expression := 'Count('+cField+')';
  98.                AggregateName := 'Contar';
  99.                Active := True;
  100.             end;
  101.          if Aggregates.Find('Media') = nil then
  102.             with Aggregates.Add do
  103.              begin
  104.                Expression := 'Avg('+cField+')';
  105.                AggregateName := 'Media';
  106.                Active := True;
  107.             end;
  108.          AggregatesActive := true;
  109.           case Tipo of
  110.             ftSomar:result:=Aggregates.Find('Somar').Value;
  111.             ftMaxima:result:=Aggregates.Find('Maxima').Value;
  112.             ftContar:result:= Aggregates.Find('Contar').Value;
  113.             FtMedia:result:= Aggregates.Find('Media').Value;
  114.           end;
  115.        end;
  116.  except
  117.   on e:Exception do
  118.     raise TypeAggregateERROR.Create(
  119.                     'Erro na passagem de parâmetros'+sLineBreak+
  120.                    'ou confira se o DataSet esta Ativo');//propagar a exceção
  121.    
  122.    end;
  123. end;
  124.  
  125. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement