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.
Para este exemplo eu utilizei um dataModule chamado uDm.pas com um componente tIbQuery por isso abra seu projeto e siga os seguintes passos:
Para importar o arquivo uLocalizar.pas para o projeto faça o seguinte:
Para importar o arquivo uLocalizar.pas para o form que irá utilizá-lo faça o seguinte:
Para utilizar o form uLocalizar como lookup faça o seguinte:
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;
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.