Fórum Criar procedure em banco Firebird #368534

17/02/2009

0

Pessoal,

Como eu faço para criar uma procedure em banco firebird, para atualizacao de estoque..como eu chamo ela...alguem poderia me ajudar?
Tenho a rotina abaixo..que atualiza o estoque em uma tabela, mas preciso garantir que o valor de estoque atual seja correto, sem que ninguem altere este valor enquanto eu estou atualizando...Para isso teria que criar uma procedure direto no banco e chama-la pelo programa..seria isso? Como faço isso?

frmprincipal.IBSQL.Close;
frmprincipal.IBSQL.SQL.Clear;
frmprincipal.IBSQL.SQL.Add(´select * from bolao where codigo = ´ + quotedstr(bolao));
frmprincipal.IBSQL.Prepare;
frmprincipal.IBSQL.ExecQuery;
estoque := frmprincipal.IBSQL.fieldByName(´estoque´).asstring;
vendidos:= frmprincipal.IBSQL.fieldByName(´vendidos´).asstring;

novoestoque := floattostr(strtofloat(estoque) + strtofloat(totalpedido));
novovendidos:= floattostr(strtofloat(vendidos)- strtofloat(totalpedido));

//atualiza valores do bolao
If not frmprincipal.IBSQL.Transaction.InTransaction then
frmprincipal.IBSQL.Transaction.StartTransaction;
frmprincipal.IBSQL.Close;
frmprincipal.IBSQL.SQL.Clear;
frmprincipal.IBSQL.SQL.Add(´UPDATE BOLAO SET´);
frmprincipal.IBSQL.SQL.Add(´ESTOQUE = ´+QuotedStr(novoestoque));
frmprincipal.IBSQL.SQL.Add(´,VENDIDOS = ´+QuotedStr(novovendidos));
frmprincipal.IBSQL.SQL.Add(´Where codigo = ´+QuotedStr(bolao));
frmprincipal.IBSQL.Prepare;
frmprincipal.IBSQL.ExecQuery;
frmprincipal.IBSQL.Transaction.CommitRetaining;


Rogerio Busch


Lrbusch

Lrbusch

Responder

Posts

18/02/2009

Cleidsonbsilva

Caro Busch,

Se esse campo ´totalpedido´ estiver em uma tabela de pedidos como estou presumindo, voce pode ao invés de criar uma PROCEDURE, criar uma TRIGGER AFTER INSERT nessa tabela que contem esse campo. Não sei se sabe a diferença entre a trigger e a procedure, mas o fato é que a trigger seria disparada automaticamente a cada vez que esse pedido fosse inserido.

Não conheço a estrutura das tabelas envolvidas, mas a trigger poderia ser mais ou menos assim:

update bolao set estoque = (estoque - new.totalpedido), vendidos = (vendidos + new.totalpedido) where codigo = new.bolao

Espero ter ajudado, qualquer dúvida manda aee...


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar