Formulário de pesquisa padrão com parâmetros

Hoje vou mostrar como criar um formulário de pesquisa padrão.

Passar parâmetros entre um formulário e outro como campos que desejo listar na pesquisa, tabela e qual campo quero capturar no resultado da consulta.

Segue parte do código form pesquisa e o vídeo logo abaixo:

  private
     cCampos, cCampoRetorno, cTabela : string; 
  public
     constructor Create(AOwner : TComponent; par_lstCampos : Array of string;par_cTabela, par_cCampoResult :string);

Constructor

constructor TfrmPesquisa.Create(AOwner: TComponent;
  par_lstCampos: array of string; par_cTabela, par_cCampoResult: string);
var
 n : Integer;
begin
  inherited Create(AOwner);
  ZConnection1.Connect;
  cCampoRetorno:=par_cCampoResult;
  cCampos:='';
  cTabela:=par_cTabela;
  for n := 0 to Length(par_lstCampos) -1 do
    begin
      cbCampos.Items.Add(par_lstCampos[n]);
      if n = 0 then
        cCampos := par_lstCampos[n]
      else
        cCampos := cCampos +','+ par_lstCampos[n];
    end;
  cbCampos.ItemIndex:=1;
  if ZQuery1.Active then
     ZQuery1.Close;
  with ZQuery1.sql do
     begin
       Clear;
       add('select '+cCampos);
       add('from '+cTabela);
     end;
  ZQuery1.Open;
end;  

Botão de Pesquisa

procedure TfrmPesquisa.btnPesquisaClick(Sender: TObject);
begin
  if ZQuery1.Active then
     ZQuery1.Close;

  with ZQuery1.sql do
     begin
       Clear;
       add('select '+cCampos);
       add('from '+cTabela);
       add('where '+trim(cbCampos.Text)+' like :cParametro');
     end;
  if trim(cbFiltro.Text) = 'parte' then
     ZQuery1.ParamByName('cParametro').AsString:='%'+trim(edtBusca.text)+'%'
  else if trim(cbFiltro.Text) = 'igual' then
     ZQuery1.ParamByName('cParametro').AsString:=trim(edtBusca.text)
  else if trim(cbFiltro.Text) = 'inicio' then
           ZQuery1.ParamByName('cParametro').AsString:=trim(edtBusca.text)+'%'  ;
  ZQuery1.Open;
  edtResultado.Text:='';

end; 

Clique duplo dbgrid

procedure TfrmPesquisa.DBGrid1DblClick(Sender: TObject);
begin
  edtResultado.Text:=ZQuery1.FieldByName(cCampoRetorno).AsVariant;
  ZQuery1.Close;
  ZConnection1.Disconnect;
  frmPesquisa.ModalResult:=mrYes;
end;     

No form principal, codigo p chamar a pesquisa

 frmPesquisa := TfrmPesquisa.Create(self,['codigo','nome','telefone'],'cliente','nome');
  try
     frmPesquisa.ShowModal;
     edtResultado.Text:= frmPesquisa.edtResultado.Text;
  finally
    FreeAndNil(frmPesquisa);
  end;  

Veja o vídeo:

lazarus #delphi #pascal #banco de dados #database #pesquisa #parametro entre formularios #formulario #parametros #formulario de pesquisa

2 comentários

  1. Americo Bravo Astroña disse:

    Obrigado por partilhar os seus conhecimentos, eu recebo um erro ao compilar.

    ubusqueda.pas(72,7) Error: Identifier not found “clear”

    Pesquisei na web tentando encontrar outra pessoa com o mesmo erro, mas não encontrei nada, então estou preso, então não tenho escolha a não ser perguntar.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *