Preciso atualizar meu estoque, como?
Oi pessoal, seguindo algumas pesquisas feitas neste forum, criei as seguintes Tabelas:
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
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
Curtidas 0
Respostas
Everton
26/05/2004
tente usar o seguinte código para a trigger:
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
Kika
26/05/2004
Everton, eu não preciso declarar o CodProduto e quantidade, para que seja feita a atualização?
Como ele vai achar a quantidade se ela não consta na trigger?
Como ele vai achar a quantidade se ela não consta na trigger?
GOSTEI 0
Afarias
26/05/2004
|Como ele vai achar a quantidade se ela não consta na trigger?
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+
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
Kika
26/05/2004
Oi pessoal!
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
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