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
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
Curtir tópico
+ 0
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...
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
Clique aqui para fazer login e interagir na Comunidade :)