Reutilização de uma consulta.

Delphi

22/12/2018

Boa tarde caros colegas,

Procurei aqui no fórum e não encontrei o que preciso especificamente e por isso venho até vocês.

Tenho uma consulta que deverei fazer exatamente da mesma forma em quase todos os forms do meu projeto. Acredito que seja possível através de uma FUNCTION, porém, não estou sabendo implementá-la.

A consulta segue este modelo:

dm_.FDQQuery.Close;
dm_.FDQQuery.SQL.Clear;
dm_.FDQQuery.SQL.Add(''select * from nomedatabela WHERE (nome = :iFunc)'');
dm_.FDQQuery.ParamByName(''iFunc'').AsString := CBLogin.Text;
dm_.FDQQuery.Prepare;
dm_.FDQQuery.Open;

Qual a forma mais correta de implementar esta ideia???

Agradeço antecipadamente à atenção de todos.

Att.
ALOISIO SANTOS.
Aloisio Santos

Aloisio Santos

Curtidas 0

Melhor post

Raimundo Pereira

Raimundo Pereira

24/12/2018



1. Crie uma função.

Function Consultas_(Tabela, Campo : STRING; Valor:Variant):boolean;
var Back:string;
var Script:string;
begin
Back:=  ' select * from XTable WHERE XCampo = '+'XValor';

Script:=Back;

Script:= StringReplace(Script, 'XTable', Tabela,
         [rfReplaceAll, rfIgnoreCase]);

Script:= StringReplace(Script, 'XCampo', Campo,
         [rfReplaceAll, rfIgnoreCase]);

Script:= StringReplace(Script , 'XValor',Valor,
         [rfReplaceAll, rfIgnoreCase]);

with
    dm.Qry_Herança do begin
    close;
    sql.Clear;
    SQL.Text:=Script;
    Clipboard.AsText:=Script;
    Prepare;

    Open;
    end;
    end;



Chamando a função em mais de um form, executando consultas diferentes .

Form1
Consultas_('mensalista_lancamento','IDMENSALISTA','1');


Form2
Consultas_('NS','NS','''AZAG3004659P5''');

Espero que ajude!!
GOSTEI 1

Mais Respostas

Claudio Andrade

Claudio Andrade

22/12/2018

Pegando o gancho na função que o colega ai criou, tomei a liberdade de fazer com uma outra forma de implementação. Espero que ajude!

function Consultas_(Tabela, Campo : STRING; Valor:Variant): // coloque aqui o tipo do campo que deseja retornar
begin
  try
    dm_.FDQQuery.Close;
	dm_.FDQQuery.SQL.Clear;
	dm_.FDQQuery.SQL.Text := Format(´select * from %s where %s = %s´, [Tabela, Campo, Valor]); // deverá fazer a conversão correta do VALOR, dessa forma aceita somente STRING
	dm_.FDQQuery.Open;  
  finally
    Result := // coloque aqui o campo que vc quer retornar
  end;
end;
GOSTEI 1
Aloisio Santos

Aloisio Santos

22/12/2018

Pegando o gancho na função que o colega ai criou, tomei a liberdade de fazer com uma outra forma de implementação. Espero que ajude!

function Consultas_(Tabela, Campo : STRING; Valor:Variant): // coloque aqui o tipo do campo que deseja retornar
begin
  try
    dm_.FDQQuery.Close;
	dm_.FDQQuery.SQL.Clear;
	dm_.FDQQuery.SQL.Text := Format(´select * from %s where %s = %s´, [Tabela, Campo, Valor]); // deverá fazer a conversão correta do VALOR, dessa forma aceita somente STRING
	dm_.FDQQuery.Open;  
  finally
    Result := // coloque aqui o campo que vc quer retornar
  end;
end;


Galera, muito obrigado pela atenção... consegui resolver com uma aula do Rodrigo Mourão sobre métodos. Criei um método público dentro do form principal do projeto e chamei-o a partir dos outros formulários que precisavam da rotina.
Parece que as dicas acima fazem ainda um pouco mais do que eu precisava nesta situação, logo, vou dar uma analisada pois vejo uma outra utilização dela dentro do meu projeto. Agradeço de coração ao P2 Técnico e ao Cláudio Duarte pela ajuda.
No mais, Boas Festas e um 2019 transbordando de bençãos na vida de todos.
GOSTEI 0
POSTAR