Fórum Preciso atualizar meu estoque, como? #44492
26/05/2004
0
Material usado:
Delphi 6 Enterprise;
Interbase 6.0.2;
Banco de dados .GDB;
SQLConnect + SQLDataSet + DataSetProvider + ClientDataSet
CREATE TABLE ´PRODUTO´
(
´CODPRODUTO´ ´DM_INTEGER_PK´,
´CODMARCA´ ´DM_INTEGER´,
´DESCRICAO´ ´DM_VARCHAR_60´,
´MODELO´ ´DM_VARCHAR_10´,
´SALDO´ ´DM_SMALLINT´,
´PRECOCUSTO´ ´DM_DINHEIRO´,
´PRECOVENDA´ ´DM_DINHEIRO´,
´PONTOS´ ´DM_SMALLINT´,
CONSTRAINT ´PK_PRODUTO´ PRIMARY KEY (´CODPRODUTO´)
CREATE TABLE ´ITENSENTRADA´
(
´CODENTRADA´ ´DM_INTEGER_PK´,
´NUMERO´ ´DM_INTEGER´,
´CODFORNECEDOR´ ´DM_INTEGER´,
´CODPRODUTO´ ´DM_INTEGER´,
´CODMARCA´ ´DM_INTEGER´,
´QUANTIDADE´ ´DM_SMALLINT´,
´VALOR´ ´DM_DINHEIRO´,
CONSTRAINT ´PK_ITENSENTRADA´ PRIMARY KEY (´CODENTRADA´)
Depois criei a seguinte TRIGGER:
CREATE TRIGGER ´ITENSENTRADA_ATUALIZA_ESTOQUE´ FOR ´ITENSENTRADA´
ACTIVE AFTER INSERT POSITION 0
AS
DECLARE VARIABLE CodProduto Integer;
DECLARE VARIABLE Saldo smallint;
DECLARE VARIABLE Quantidade smallint;
begin
SELECT CodProduto, SALDO FROM PRODUTO WHERE CODPRODUTO =:CODPRODUTO INTO :Codproduto, :Saldo;
If (:saldo is null) then Saldo=0;
SELECT Codproduto, QUANTIDADE FROM ITENSENTRADA WHERE CODPRODUTO =:CODPRODUTO INTO :CodProduto, :Quantidade;
SALDO = Saldo + New.Quantidade;
update produto
set SALDO = :Saldo
where codproduto = :codproduto;
end
^
o intuito é que quando gravar a QUANTIDADE da tabela ITENSENTRADA, também atualiza-se o SALDO na tabela PRODUTO.
Após tudo isto o SALDO não deveria atualizar?
Se não, por favor me digam porque e como contornar essa situação, pois já tentei de tudo e não estou conseguindo.
Será que tenho que referenciar essa TRIGGER em algum lugar para dar certo?
Grata, Kika
Kika
Curtir tópico
+ 0Posts
26/05/2004
Everton
CREATE TRIGGER "ITENSENTRADA_ATUALIZA_ESTOQUE" FOR "ITENSENTRADA" ACTIVE AFTER INSERT POSITION 0 AS DECLARE VARIABLE Saldo smallint; begin SELECT SALDO FROM PRODUTO WHERE CODPRODUTO =:CODPRODUTO INTO :Saldo; If (:saldo is null) then Saldo=0; Saldo = Saldo + New.Quantidade; update produto set SALDO = :Saldo where codproduto = new.codproduto; end
Gostei + 0
27/05/2004
Kika
Como ele vai achar a quantidade se ela não consta na trigger?
Gostei + 0
27/05/2004
Afarias
Todos os campos da tabela que disparou a terigger podem ser acessados/manipulados diretamente. usando NEW para novos valores e OLD para os antigos::
NEW.CAMPOTAL = x;
T+
Gostei + 0
31/05/2004
Kika
Deu certo da seguinte forma:
REATE TRIGGER ´ITENSENTRADA_ATUALIZA_ESTOQUE´ FOR ´ITENSENTRADA´
ACTIVE AFTER INSERT POSITION 0
AS
DECLARE VARIABLE CodProduto Integer;
DECLARE VARIABLE Saldo smallint;
begin
SELECT SALDO FROM PRODUTO WHERE CODPRODUTO =:CODPRODUTO INTO :Saldo;
If (:saldo is null) then Saldo=0;
update produto
set SALDO = Saldo + New.Quantidade
where codproduto = new.codproduto;
end
Tive que [b]declarar o CODProduto[/b]
mudei de lugar a parte SALDO = [b]Saldo + New.Quantidade[/b]
Espero que essas mudanças possa ajudar a mais alguem
Obriiiiiiiiiiiiiigada!!!!
Kika
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)