Boa tarde galera estarei publicando hoje aqui um artigo que é sem duvida muito importante para quem pretende trabalhar com regras de negócio do lado do servidor de banco de dados.

A tratativa é simples porém de grande valia, não percamos mais tempo mãos a obra...

 

Nesse exemplo iremos criar uma stored procedure que irá checar se um determinado item possui saldo em estoque para vendas, observando porém algumas  regras na própria procedure.

 

--Criação da Tabela

Create Table TbEstoque(

      id int not null identity(1,1)primary key,

      Descricao varchar(255),

      Preco float,

      Saldo float

 

)

Go

--Criação da Stored Procedure

Create alter Procedure SpBaixaEstoque

(

  @id int,

  @QtdVnd float

)

as

Declare @Saldo float

begin

  set @Saldo = (select Saldo From TbEstoque where id = @id)

 

  --Verificando o saldo do produto

  if (@Saldo <= 0 )

   raiserror 50001 ''esse item não possui saldo de estoque''

  else if(@Saldo < @QtdVnd)

   raiserror 50001 ''esse item não possui saldo suficiente para realizar essa venda''

  else

  begin  

     update TbEstoque

       set Saldo = (@Saldo - @QtdVnd)

     where Id = @id 

  end

end;

insira alguns itens na tabela pra fazero teste

insert into TbEstoque values(''Tenis'', 120,10)

 

no aplicativo delphi crie uma tela parecida com a mostrada a seguir:

no evento onClick do Botão insira o seguinte trecho de código:

  Try

    with SpBaixaEstoque do

    begin

      Parameters.ParamByName(''@id'').Value     := Qrid.AsInteger;

      Parameters.ParamByName(''@QtdVnd'').Value := StrToFloat(Edit1.Text);

      ExecProc;

 

      MessageDlg(''Venda Concluída'',mtInformation,[mbok], 0);

 

      Qr.Close;

      Qr.Open;

    end;

 

  Except

    on e : EDatabaseError do

    begin

      ShowMessage(e.Message);

    end;

  End;

A grande sacada é declarar uma variavel do tipo EDatabaseError na clausula exception, para capturar errors vindos do banco de dados, um grande abraço a todos dúvidas postem.