Fórum Preciso atualizar meu estoque, como? #44492

26/05/2004

0

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


Kika

Kika

Responder

Posts

26/05/2004

Everton

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 



Responder

Gostei + 0

27/05/2004

Kika

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?


Responder

Gostei + 0

27/05/2004

Afarias

|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+


Responder

Gostei + 0

31/05/2004

Kika

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


Responder

Gostei + 0

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

Aceitar