[firebase-br] Ajuda com UPDATE

Sandro Souza escovadordebits em gmail.com
Ter Fev 2 14:52:22 -03 2010


Bom dia/tarde Ronan.

Grande Ronan, acredito que esteja apenas faltando a cláusula WHERE do
próprio UPDATE, pois da forma que está estruturado esse comando, todos os
estoques serão atualizados, mas provavelmente nem todos os estoques
participaram da venda 31, e dessa forma, todos os estoques que não
participaram da venda 31 ficarão zerados, ou quem sabe até com NULL.

Se for essa a causa real do problema, então teste o seguinte comando:

UPDATE ESTOQUE E SET
  E.ESTOQUE_ATUAL = E.ESTOQUE_ATUAL - (
    SELECT
      V.QTDPRODUTO
    FROM
      VENDAS_PRODUTOS V
    WHERE
      (V.ID_PRODUTO = E.ID)AND
      *(V.ID_ESTOQUE = E.ID_ESTOQUE)AND*
      (V.ID_VENDAS = 31))
*WHERE
  EXISTS(
    SELECT
      V2.ID_ESTOQUE
    FROM
      VENDAS_PRODUTOS V2
    WHERE
      (V2.ID_VENDAS = 31)AND
      (V2.ID_ESTOQUE = E.ID_ESTOQUE))*

Notei também que faltou amarrar o código do estoque na pesquisa da
quantidade de produto (se eu estiver enganado, por favor me desculpe).

Acredito que a condição que está na cláusula WHERE do UPDATE vá limitar a
alteração apenas aos estoques que realmente participaram daquela venda,
deixando os demais estoques intactos, mas nada como um bom e velho teste.

Espero ter ajudado mais que atrapalhado. :D

Em 2 de fevereiro de 2010 10:43, Ronan
<ronan em antarescomputadores.com.br>escreveu:

> Prezados,
> Estou com o seguinte problema:
> Tenho uma tabebela de estoque (ESTOQUE) com os campos Estoque_Atual,
> ID_estoque
> e uma tabela de produtos vendidos (VENDA_PRODUTOS) com os campos ID_Venda,
> QuantidadeVendida, ID_Estoque.
>
> Preciso atualizar o campo estoque_atual da tabela de estoque com base nos
> produtos vendidos na tabela de ProdutosVendidos.
>
> vou informar o numero da venda e fazer a atualização.
>
> Suponha que o numero da venda seja 31
>
> Tentei várias sintax com o update, mas não consegui.
>
> A ultima foi essa:
>
> UPDATE ESTOQUE
> set
> ESTOQUE.ESTOQUE_ATUAL = ESTOQUE.ESTOQUE_ATUAL -
> (SELECT VENDAS_PRODUTOS.QTDPRODUTO from VENDAS_PRODUTOS
> WHERE VENDAS_PRODUTOS.ID_PRODUTO = ESTOQUE.ID  and
> VENDA_PRODUTOS.ID_VENDAS = 31)
>
> O problema é que ele atualiza corretamente os produtos que estão no estoque
> mas zera todos os outros produtos
>
> Veja abaixo: Foram vendidas 40 unidades do produto B na venda 31, e nenhuma
> unidade dos outros produtos.
> Os produtos A e C tiveram suas quantidades zeradas indevidamente.
>
> Tabela de estoque          (Antes da atualização)
>                         Depois
>                                      produto    quantidade
>                         produto    quantidade
>                                           A              30
>                                     A           null (incorreto)
>                                           B              50
>                                      B           10 (correto)
>                                           C              80
>                                       C         null (incorreto)
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista