Pesquisa Lookup parametrizada em delphi 7

    Sun, May 01 2011
      

Este é um exemplo simples para quem necessita fazer uma janela lookup parametrizada para uma aplicação delphi. Desenvolvi este modelo para um projeto da faculdade onde era necessário através de uma única janela, buscar dados de qualquer tabela do banco de dados, por isso ficou bem didático e fácil de manipular. Indico este formato apenas aos que precisarem de algo bem simples, mas é possível manipular a classe para incluir novas funcionalidades.

Para utilizar o formulário lookup parametrizado o princípio é bem simples, você deve chamá-lo de forma modal passando a tabela e os campos chave e descrição que deverão ser pesquisados, depois pega o valor de retorno através dos parâmetros getChave e getDescricao. Abaixo segue um exemplo de chamada ao formulário de pesquisa.

Dicas

Criando o DataModule

Para este exemplo eu utilizei um dataModule chamado uDm.pas com um componente tIbQuery por isso abra seu projeto e siga os seguintes passos:

  • Clique em File;
  • New;
  • Data Module;
  • Abra a paleta interbase;
  • Importe para o Projeto um componente tIbTransaction, tIbDatabase, tIbQuery;
  • Conecte o componente tIbDatabase ao banco de dados;
  • Conecte os compontes tIbDatabase ao tIbTransaction e tIbQuery ao tIbDatabase;
  • Renomeie o tIbQuery para qAux;
  • Clique em File, Save as e Salve o dataModule como uDm na pasta do projeto;
  • Troque a propriedade name do dataModule para dm;

Importando os arquivos para o projeto

Para importar o arquivo uLocalizar.pas para o projeto faça o seguinte:

  • Salve os arquivos uLocalizar.pas e uLocalizar.dfm na pasta do projeto;
  • Pressione Shift + F11;
  • Selecione o arquivo localizar.pas;
  • Clique em OK;

Importando os arquivos para o form

Para importar o arquivo uLocalizar.pas para o form que irá utilizá-lo faça o seguinte:

  • Abra o form que utilizará o valor lookup;
  • Pressione Alt + F11;
  • Selecione o arquivo uLocalizar.pas;
  • Clique em OK;

Utilizando o Lookup

Para utilizar o form uLocalizar como lookup faça o seguinte:

  • Acrescente um botão no form que utilizará o lookup;
  • No evento OnClick digite o código abaixo;

Exemplo de chamada ao formulário parametrizado:

obs: por problemas de incompatibilidade com o navegador, troque as aspas duplas por aspas simples

procedure TfAluno.btnLocalizarCursoClick(Sender: TObject);
var
    frm: TfLocalizarDados;
begin

    frm:= TfLocalizarDados.create(application);
    try

        with frm do
        begin
            {tabela que será pesquisada}
            Tabela:= "curso";

            {campo codigo da tabela que será pesquisada}
            campoChave:= "codCurso";

            {campo descritivo da tabela que será pesquisada}
            campoParametro:= "nomeCurso";

            {pega os dados e joga na grade}
            getDados;
        end;

        if frm.showmodal = mrOk then
        begin
            {pega o codigo de retorno e joga no campo codigo desejado}
            edtCodCurso.text:= frm.getChave;

            {pega a descricao de retorno e joga no campo desejado}
            edtNomeCurso.text:= frm.getDescricao;
        end;

        finally
            frm.free;
    end;
end;

Importante:

  • Troque os nomes dos edits utilizados no exemplo por aqueles que você criou no seu projeto;
  • O exemplo acima foi desenvolvido para buscar dados da tabela curso, você deverá mudar os valores de: tabela, campochave e campoParametro para os nomes daqueles que deseja pesquisar;
  • O projeto acima utiliza a paleta Interbase, se você não está acostumado com esta paleta, troque os componentes para os que desejar;

Segue o conteúdo do arquivo uLocalizar.pas.

obs: por problemas de incompatibilidade com o navegador, troque as aspas duplas por aspas simples

unit uLocalizar;

interface

uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, ComCtrls, ExtCtrls, StdCtrls, Buttons;

type
    TfLocalizarDados = class(TForm)
    Panel1: TPanel;
    lvDados: TListView;
    GroupBox1: TGroupBox;
    btnPesquisar: TBitBtn;
    edtParametro: TEdit;
    Label1: TLabel;
    btnRetornar: TBitBtn;
    Panel2: TPanel;
    procedure btnRetornarClick(Sender: TObject);
    procedure lvDadosDblClick(Sender: TObject);
    procedure btnPesquisarClick(Sender: TObject);
    
    private
        { Private declarations }
        vCampoChave : string;
        vCampoPar : string;
        vTabela : string;
        vresultcampo : string;
        vresultChave : string;
        vresultDescricao : string;

    public
        { Public declarations }
        property CampoChave : string read vCampoChave write vCampoChave;
        property CampoParametro : string read vCampoPar write vCampoPar;
        property Tabela : string read vTabela write vTabela;
        property getChave : string read vresultChave write vresultChave;
        property getDescricao : string read vresultDescricao write vresultDescricao;

        procedure getDados;
    
end;

var
    fLocalizarDados: TfLocalizarDados;

implementation

uses uDm;

{$R *.dfm}

procedure TfLocalizarDados.getDados;
var
    it: tListItem;
begin

    self.Caption:= "Pesquisa " + tabela;

    with dm.qAux do
    begin
        close;
        sql.clear;
        sql.add("select " + campoChave + "," + campoParametro );
        sql.add("from " + tabela );

        if trim(edtParametro.Text) <> "" then
            sql.add("where " + campoParametro + " like ""%" + edtParametro.text + "%""");

        open;
    end;

    lvDados.Clear;
    while not dm.qAux.eof do
    begin
        it:= lvDados.Items.Add;

        it.Caption:= dm.qAux.fieldByName(campoChave).asString;
        it.SubItems.add(dm.qAux.fieldByName( campoParametro).asString);

        dm.qAux.next;
    end;
end;

procedure TfLocalizarDados.btnRetornarClick(Sender: TObject);
begin
    modalResult:= mrCancel;
end;

procedure TfLocalizarDados.lvDadosDblClick(Sender: TObject);
begin
    try
        vresultChave:= lvDados.Selected.Caption;
        vresultDescricao:= lvDados.Selected.SubItems[0];

        ModalResult:= mrOk;
        except
    end;
end;

procedure TfLocalizarDados.btnPesquisarClick(Sender: TObject);
begin
    getDados;
end;

end.