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.