Buscar

Curso Delphi – Criando uma Aplicação do Início ao fim - Parte 10

nome

Rubens Antunes

Rubens Antunes, Autor do Livro Delphi Faça uma Aplicação Comercial e Desenvolvedor Delphi desde de 2004.

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.

Publicidade

Vote no artigo




Quantidade de votos: 2 votos
Aceitação: 20%


Detalhes do artigo

Categoria: Banco de dados
Adicionado dia: 09/04/10
Por: Rubens Antunes
Visualizado: 45868 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009