Jump to content
Sign in to follow this  
Leudassdf

[Resolvido] atualizar quantidade com dados de outra tabela

Recommended Posts

Leudassdf

Boas pessoa,

Eu tenho 2 tabelas. Uma é a tabela vendas e a outra é a transacoes. Na tabela vendas fica registado o n_venda que é automatico,o username do cliente,o valor_total da compra... etc

Na tabela transacoes fica registado o n_venda,n_transacao que é automatico, cod_produto,quantidade,preco_unitario,username.

No entanto o meu objectivo passa por permitir ao utilizador eliminar o seu pedido de encomenda. Quando o utilizador faz a encomenda ele escolhe x quantidade de produtos. E essa quantidade é subtraída a quantidade actualmente disponível.

No entanto quando eu cancelar a encomenda deveria "repor" os valores das quantidades nos seus respetivos produtos.

Mas como é que eu consigo fazer isso?

Cumprimentos

Share this post


Link to post
Share on other sites
nelsonr

Boas,

e queres fazer isso com Stored Procedures ou a partir de uma aplicação?

Poderá ser algo assim:

- Ler todos os movimentos da encomenda a cancelar

- Para cada movimento, soma a quantidade do movimento à quantidade disponivel

- Quando chegar ao fim, removes tudo referente à encomenda (tabela vendas e transacoes)

Se for com stored procedure, usas um CURSOR para fazer o ciclo pelos movimentos da encomenda

Edited by nelsonr

Share this post


Link to post
Share on other sites
Leudassdf

Boas,

e queres fazer isso com Stored Procedures ou a partir de uma aplicação?

Poderá ser algo assim:

- Ler todos os movimentos da encomenda a cancelar

- Para cada movimento, soma a quantidade do movimento à quantidade disponivel

- Quando chegar ao fim, removes tudo referente à encomenda (tabela vendas e transacoes)

Se for com stored procedure, usas um CURSOR para fazer o ciclo pelos movimentos da encomenda

o objectivo é que para cada movimento some a quantidade do movimento a quantidade disponivel.

Share this post


Link to post
Share on other sites
nelsonr

Bem, se percebo o que pretendes, podes fazer uma stored procedure desta maneira:

CREATE PROCEDURE CancelarEncomenda
@n_venda int
AS
BEGIN
SET NOCOUNT ON;

-- Verificar se existe a venda com o número dado
IF EXISTS(SELECT * FROM vendas WHERE n_venda=@n_venda)
BEGIN

	DECLARE @cod_produto varchar(50)
	DECLARE @quantidade float

	-- Passar por todos os movimentos
  	 DECLARE db_cursor CURSOR FOR SELECT cod_produto, quantidade FROM transacoes WHERE n_venda=@n_venda
  	 OPEN db_cursor;
	FETCH NEXT FROM db_cursor INTO @cod_produto, @quantidade
	WHILE @@FETCH_STATUS = 0  
	BEGIN  
		-- Repor quantidade na tabela de produtos
		UPDATE produtos SET quantidade_disponivel=quantidade_disponivel+@quantidade WHERE cod_produto=@cod_produto

		-- Passar para a transaccao seguinte
		FETCH NEXT FROM db_cursor INTO @cod_produto, @quantidade
	END
  	 CLOSE db_cursor
	DEALLOCATE db_cursor

	-- Remover da tabela de transaccoes
	-- DELETE FROM transacoes WHERE n_venda=@n_venda
	-- Remover da tabela de vendas
	-- DELETE FROM vendas WHERE n_venda=@n_venda
END
END
GO

As linhas comentadas no final é para se quiseres remover os movimentos cancelados das tabelas

  • Vote 1

Share this post


Link to post
Share on other sites
jsWizard

triggers:

Trigger "on insert" na tabela transacções que actualiza o stock retirando a quantidade na venda. Outro trigger "on delete" que repoe a quantidade.

Inté!

Share this post


Link to post
Share on other sites
Leudassdf

Resolvido. Foi necessário apenas uma instruçao sql.

Depois coloco a minha query

Cumprimentos

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.