Skip to content
Mobius One edited this page Nov 30, 2025 · 2 revisions

Home > DAO

DAO

Classes para facilitar comunicação entre cliente e servidor através de Data Access Objects (DAO)

Delphi:

  • DAO.REST: Objeto de acesso a dados baseado nos componentes REST Http nativos da IDE Delphi. Capaz de consumir requisições e automaticamente mapear uma MemTable ou uma Grid (FMX). Exemplo de consumo do receitaws:
//https://receitaws.com.br/v1/cnpj/{cnpj}
procedure ExemploReceitaWS(ACNPJ: string); 
begin
  with TDAOClientREST.Create('https://receitaws.com.br/v1/') do
    try
      Resource('cnpj')
        .AddHeader('', ACNPJ)
//        .MemTable(FDMemtable)
//        .Grid(StringGrid1)
        .Get;
    finally
      Free;
    end;
end

Exemplo com BasicAuthentication fictício:

procedure ExemploBasicAuth(aBaseURL, aUsuario, aSenha: string); 
begin
  with TDAOClientREST.Create(aBaseURL, aUsuario, aSenha) do
    try
      Resource('endpoint')
//        .MemTable(FDMemtable)
//        .Grid(StringGrid1)
        .Get; //.Post; .Put; .Patch; .Delete;
    finally
      Free;
    end;
end

Exemplo fictício de particionamento da resposta em múltiplos datasets:

procedure ExemploJSONPart(ServerURL, LOGIN, SENHA: string): string;
var
  mtpart1, mtpart2, mtpart3, mtpart4, mtpart5, mtpart6, mtpart7, mtpart8,
    mtpart9, mtpart10, mtpart11, mtpart12: TFDMemTable;
  edtInicial, edtFinal, edtHoraFin, edtHoraIni: TEdit;
begin  
  mtpart1 := TFDMemTable.Create(self);
  mtpart2 := TFDMemTable.Create(self);
  mtpart3 := TFDMemTable.Create(self);
  mtpart4 := TFDMemTable.Create(self);
  mtpart5 := TFDMemTable.Create(self);
  mtpart6 := TFDMemTable.Create(self);
  mtpart7 := TFDMemTable.Create(self);
  mtpart8 := TFDMemTable.Create(self);
  mtpart9 := TFDMemTable.Create(self);
  mtpart10 := TFDMemTable.Create(self);
  mtpart11 := TFDMemTable.Create(self);
  mtpart11 := TFDMemTable.Create(self);

  with TDAOClientREST.Create(ServerURL, LOGIN, SENHA) do
    try
      Resource('endpoint')
        .AddHeader('dataini', edtInicial.Text + ' ' + edtHoraIni.Text)
        .AddHeader('datafin', edtFinal.Text + ' ' + edtHoraFin.Text);

      if condicao in [cd1, cd2] then
        JSONPartToDataSet('part1', mtpart1)
        .JSONPartToDataSet('part2', mtpart2)
        .JSONPartToDataSet('part3', mtpart3)
        .JSONPartToDataSet('part4', mtpart4)
      else
        JSONPartToDataSet('part5', mtpart5)
        .JSONPartToDataSet('part6', mtpart6)
        .JSONPartToDataSet('part7', mtpart7)
        .JSONPartToDataSet('part8', mtpart8)
        .JSONPartToDataSet('part9', mtpart9)
        .JSONPartToDataSet('part10', mtpart10)
        .JSONPartToDataSet('part11', mtpart11)
        .JSONPartToDataSet('part12', mtpart12);

      Get;
      // Se a função .MemTable for usada também no mesmo request, vai ignorar todos os .JSONPartToDataSet!
      // Use ou o .MemTable ou o .JSONPartToDataSet
      
      if StatusCode <> 200 then
        Showmessage(ResponseText)
      else
        // Faz Algo
        
    finally
      Free;
    end;
end;    

PascalLibs

Clone this wiki locally