Curso Delphi – Criando uma Aplicação do Início ao fim - Parte 10
Join e OnValidate
Neste artigo estarei demonstrando como trabalhar com Join e com o evento OnValidate.
Abrindo o data module dmPedido, selecione o componente sdsCadPedido e dê dois clique na propriedade command Text e mude a instrução Sql de acordo com o quadro a seguir:
select
PED.DATA,
PED.IDCLIENTE,
PED.IDPEDIDO,
PED.VALOR,
CLI.NOME
from PEDIDO PED
Inner Join CLIENTE CLI ON CLI.IDCLIENTE = PED.IDCLIENTE
Where IDPEDIDO =:pIDPEDIDO
Existem dois tipos de Join o Inner Join que obriga que ele encontre o dado e
o left Join que não, o dado pode ou não existir, Poderíamos mudar o Inner Join
para Left Join.
Dê dois clique no componente sdsCadPedido e com o botão direito do mouse
escolha add all fields, caso dê algum erro você precisará reconfigurar a propriedade
params, e logo depois você perceberá que aparecerá o campo nome, provindo da
tabela CLIENTE.
O Join faz a união de duas tabelas, para que você utilize os campos que
desejar da outra tabela.
Coloque em nosso data Module dmPedido um novo SqlDataSet e mude as seguintes
propriedades:
Dê dois clique no componente cdsCadPedido e selecione o campo IDCLIENTE e dê
dois clique no evento OnValidate e coloque o seguinte código:
procedure TdmPedido.cdsCadPedidoIDCLIENTEValidate(Sender: TField);
begin
With sdsInfoCliente do
begin
Close;
Params.ParamByName('IDCLIENTE').AsInteger:=
cdsCadPedidoIDCLIENTE.AsInteger;
Open;
cdsCadPedidoNOME.AsString:=FieldByName('NOME').AsString;
end;
end;
No código anterior estamos localizando o cliente e atribuindo ao campo NOME do Join
com o nome do cliente que localizamos. Para testarmos vá ao formulário frmCadVenda
adicione um botão e coloque o seguinte código:
procedure TfrmCadVenda.BitBtn1Click(Sender: TObject);
begin
dmPedido.cdsCadPedido.Open;
dmPedido.cdsCadPedido.Append;
end;
Nota: Você deve colocar o campo NOME no Field Editor do Clientdataset
cdscadPedido.
Execute a aplicação e digite no IDCLIENTE um código já existente em sua tabela de
Cliente e veja o resultado:
Ao sair do campo IDCLIENTE ele trará o nome do cliente, muitos programadores utilizam o
evento OnExit do próprio campo, ele surte o mesmo efeito, com a seguinte diferença, no
OnExit só aparecerá o nome assim que o usuário sair do campo, já o OnValidate também, mas
ele quando recebe o código ele também é disparado, assim quando fizermos nossa pesquisa
de cliente ele nos será muito útil.
Assim como fizemos com o componente sdsCadPedido faça o mesmo com o
componente sdsItens e mude a sua instrução Sql de acordo com a quadro a seguir:
select
ITEN.IDPEDIDO,
ITEN.IDPRODUTO,
ITEN.QUANTIDADE,
ITEN.TOTALITEN,
ITEN.UNITARIO,
PROD.PRODUTO
from ITENS ITEN
Inner Join PRODUTO PROD ON PROD.IDPRODUTO = ITEN.IDPRODUTO
Where IDPEDIDO =:pIDPEDIDO
Nota: Quando coloco a palavra ITEN, antes do campo é porque estou dando um
apelido para tabela, poderia usar somente o nome da tabela.
Adicione em nosso data module dmPedido mais um SqldataSet e mude as seguintes
propriedades:
Ok, fizemos o nosso join, agora podemos fazer nossa pesquisa no evento
OnValidate e trazer o nome do produto, vamos a prática:
Dê dois clique no componente cdsItens e selecione o campo IDPRODUTO e adicione
o seguinte código no evento OnValidate:
procedure TdmPedido.cdsItensIDPRODUTOValidate(Sender: TField);
begin
With sdsInfoProduto do
begin
Close;
Params.ParamByName('pIDPRODUTO').AsInteger:=
cdsItensIDPRODUTO.AsInteger;
Open;
cdsItensPRODUTO.AsString:=FieldByName('PRODUTO').AsString;
end;
end;
Adicione Produtos a tabela de PRODUTO e execute a aplicação, só não esqueça de
dar qualquer código ao campo IDPEDIDO, para não dar erro, já que as duas tabelas
estão ligadas pelo relacionamento.
Veja como ficou a execução do projeto:
Conclusão: Neste artigo procurei mostrar a utilização de Joins e do evento
OnValidate, você pode melhorar e aprofundar mais essa idéia. Busco neste curso
dar uma base de sustentação para todos, para chegarmos ao mesmo nível. Maiores
informações vocês podem adquirir no meu livro – Delphi – Faça Uma Aplicação
Comercial, muito obrigado e até o próximo artigo onde mostrarei como selecionar
os clientes e os produtos em uma tela de pesquisa.