Buscar

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

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 12

Somando Valores e Campo Auto Incremento

Neste artigo irei demonstrar como somar o total dos itens e total do pedido, para isso iremos utilizar um campo agreggate e o evento OnValidate de alguns campos. Irei utilizar um campo auto incremento, para adicionarmos o numero do pedido.

OnValidate: É um evento do campo, ou seja, quando o campo recebe um determinado valor ele dispara o evento, para validar o campo.

Vamos utilizar esse evento para validarmos a quantidade e o valor unitário de cada item do nosso pedido, assim que ele receber a quantidade ele irá multiplicar pelo valor unitário, dando assim o total daquele item.

Abra o data module dmPedido e abra o cdsItens e selecione o campo quantidade e no Object Inspector selecione a aba Events e escolha o evento OnValidate e coloque o seguinte código:

procedure TdmPedido.cdsItensQUANTIDADEValidate(Sender: TField);
begin
  With dmPedido.cdsItens do
  begin
    cdsItensTOTALITEN.AsFloat:=0;
    cdsItensTOTALITEN.AsFloat:=
    cdsItensUNITARIO.AsFloat * dmPedido.cdsItensQUANTIDADE.AsFloat;
  end;
end;

Entendendo o código: Primeiro zeramos o campo TOTALITEN, caso ele possua algum valor, logo depois multiplicamos o campo UNITÁRIO pela QUANTIDADE e atribuímos o resultado ao campo TOTALITEN.

Vamos fazer o mesmo procedimento ao campo UNITARIO, adicionando o mesmo código anterior.

procedure TdmPedido.cdsItensUNITARIOValidate(Sender: TField);
begin
  With dmPedido.cdsItens do
  begin
    cdsItensTOTALITEN.AsFloat:=0;
    cdsItensTOTALITEN.AsFloat:=
    cdsItensUNITARIO.AsFloat * dmPedido.cdsItensQUANTIDADE.AsFloat;
  end;
end;

Assim se o usuário colocar a quantidade ou valor unitário ele irá multiplicar.

Agreggate: Este é um campo criado em memória para agregar valores, ou seja, precisamos saber qual o total do pedido, este campo agreggate irá somar todos os valores do campo TOTALITEN.

Abra o data module dmPedido e abra o cdsItens tecle com o botão direito do mouse sobre o field editor e escolha a opção New Field e preencha de acordo com a tela a seguir:


Dê OK e perceba que no Field Editor ele criou um novo campo totalpedido, mas percebemos também que este campo está separado dos outros, como demonstra a figura a seguir:


Selecione o campo totalpedido e mude a propriedade Active para True, feche o Field Editor e selecione o cdsItens e mude a propriedade AgreggatesActive para True. Ok acabemos de criar e configurar o campo agreggate, agora vamos faze uso deste campo, para isso abra o formulário frmCadVenda e selecione o DbEdit que representa o campo valor e mude a propriedade DataSource para dtsItens e a propriedade DataField para totalpedido. Pronto nosso campo agreggate está criado e já estamos fazendo uso do mesmo. Execute a aplicação e veja como ficou na figura a seguir:


Podemos perceber que assim que adicionamos um novo item e colocamos a quantidade e o valor unitário o campo totalpedido não recebe valor algum, isso ocorre porque o campo agreggate só começa a somar assim que o registro é validado, para resolvermos isso vamos colocar um código no evento OnExit do DbEdit da QUANTIDADE, coloque assim:

procedure TfrmCadVenda.DBEdit5Exit(Sender: TObject);
begin
  dmPedido.cdsitens.next;
end;

Faça o mesmo no DbEdit UNITARIO:

procedure TfrmCadVenda.DBEdit6Exit(Sender: TObject);
begin
   dmPedido.cdsitens.next;
end;

O que acabei de fazer é mandar ele ir para o próximo iten, mas como não há o próximo iten ele passa o registro de estado de edição para navegação, assim o campo agreggate é validado.

CAMPO AUTOINCREMENTO

Tenho recebido muitos emails me pedindo para implementar o campo auto incremento do pedido, é muito simples. Vamos criar um generator no banco de dados que nos servirá como referência.

Abra o IBExpert e selecione o nosso campo e na opção Generators dê Ctrl+N para gerarmos um novo generator, preencha a tela a seguir de acordo com a figura abaixo:


Precisamos criar uma tabela para receber o valor do generator temporariamente, crie uma tabela chamada codigo e crie um campo chamado ID, preencha um único registro com um número qualquer, como demonstra a figura a seguir:


Retorne ao Delphi e no nosso data module dmpedido coloque mais um SqlDataSet e mude as seguintes propriedades:


Vamos entender essa instrução SQL, Selecionamos através da função Gen_ID do firebird o generator GEN_CODPEDIDO, e adicionamos mais um ao valor do generator e atribuímos este valor ao campo NOVOID, a tabela código, nos serve apenas para gerar essa instrução SQL.

No evento OnNewRecord do ClientDataSet cdsCadPedido, coloque o seguinte código:

procedure TdmPedido.cdsCadPedidoNewRecord(DataSet: TDataSet);
begin
  With sdsNovoID do
  Begin

    Open;
    cdsCadPedidoIDPEDIDO.AsInteger:=sdsNovoIDNOVOID.AsInteger;
  end;
end;

Toda vez que você abrir o SqlDataSet sdsNovoID ele irá retornar com o valor do generator.

Execute a aplicação e veja como ficou na figura a seguir:


Conclusão: Acabamos de implementar o campo OnValidate, Agreggate e auto incremento, de uma maneira simples, existem diversas maneiras como atribuir valores ao evento OnExit de um DbEdit, usar um campo calculado para agregar valores e criar uma trigger no banco de dados para executar um instrução para gerar o novo ID. Fico por aqui e no próximo artigo vamos melhorar a aparência do formulário. Até lá.

Publicidade

Vote no artigo




Quantidade de votos: 0 votos
Aceitação: 0%


Detalhes do artigo

Categoria: Banco de dados
Adicionado dia: 06/09/10
Por: Rubens Antunes
Visualizado: 58211 vezes

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