Jump to content
Sign in to follow this  
Guest miguelfreitas

[Resolvido] Declaração SQL para subtrair

Recommended Posts

Guest miguelfreitas

Bom-dia,

alguém sabe qual é a declaração SQL para a subtracção (menos) ?

Exemplo:

Tabela 1 (ref,nome, stock,...)

Tabela 2 (ref, stock)

Eu tenho um formulário de vendas (ligado a tabela 2) que tem uma combo box com todas as referências que existe na tabela 1, e uma caixa de texto para inserir a quantidade de produtos vendidos e um botão para confirmar.

Caso real : Vendo 2 produtos XPTO, vou ao formulário, escolho na caixa de combinação a referencia XPTO e meto na caixa de texto o nr "2" e carrego no botão.

Isto assim já consegui fazer, os dados que insiro no formulário de vendas acrescentam na tabela 2

Agora o que queria fazer era o seguinte, queria tirar da tabela 1 o numero de stock vendido na tabela 2, ou seja, na tabela 2  está:

XPTO - quantidade vendida (2)

e na tabela 1 está

XPTO - stock existente (12)

Após eu confirmar a venda no botão do formulário de vendas, o stock existente da tabela 1 devia passar para 10.

Devia de ter uma declaração SQL que fizesse :

Stock da tabela 1 - Stock da tabela 2

Falo em SQL , mas não sei se dá para fazer em VBA, espero que me tenha feito entender.

Miguel Freitas ;)

Share this post


Link to post
Share on other sites
KeepItSimple

Como é que estás a inserir o registo na TABELA2 ? A actualização do registo na TABELA1 pode usar o mesmo processo...

A instrução de SQL será algo do tipo:

UPDATE TABELA1 SET STOCK=STOCK-2 WHERE REF='XPTO'

Share this post


Link to post
Share on other sites
Guest miguelfreitas

Insiro o registo na tabela 2 através dum formulário, a tabela 2 tem os campos ref e stock, a tabela 1 tem esses campos também mas mais alguns.

a acção de venda é inserida na tabela 2 depois com uma consulta sql devia fazer a subtração e apresentar o resultado na tabela 1

Share this post


Link to post
Share on other sites
Guest miguelfreitas

alterei a estrutura....

em vez de ter a tabela 1 e a tabela 2, apaguei a tabela 2 e meti o campo venda na tabela 1,

ou seja , agora a tabela 1 tem os campos (ref,....,stock,....,venda)

e a instrução SQL é a seguinte:

 UPDATE tabela1 SET stock = stock-venda; 

só que está a dar erros, vamos supor, tenho 10 registos, ao efectuar uma venda apaga o stock de todos os registos e só mexe o 1º .

talvez seja útil meter o código do botão do formulário de venda :

Private Sub Comando3_Click()
If MsgBox("Pretende confirmar a venda ?", vbYesNo) = vbYes Then
DoCmd.RunSQL ("Insert into tabela1 (venda) values (venda)")
Refresh
DoCmd.RunMacro ("act2")
DoCmd.Close
DoCmd.OpenReport "vendas", acViewReport, , crit
End If
End Sub

Share this post


Link to post
Share on other sites
KeepItSimple

Não percebi essa alteração de 2 para 1 tabela. Não me parece fazer muito sentido.

Convém teres 1 tabela para a lista de artigos, e outra para a lista dos movimentos (vendas).

se tiveres a tabela1 para os artigos (REF,NOME,STOCK,...) e a tabela2 para as vendas (ID,REF,QT,...), o código do botão seria algo parecido com:

Private Sub Comando3_Click()

    Dim xREF
    Dim xQT
    
    xREF = Me.txtREF
    xQT = Me.txtQT
    
    If MsgBox("Pretende confirmar a venda ?", vbYesNo) = vbYes Then
        DoCmd.RunSQL ("Insert into Tabela2 (ref,qt) values ('" & xREF & "'," & xQT & ")")
        DoCmd.RunSQL ("Update Tabela1 set stock = stock - " & xQT & " where ref='" & xREF & "'")
        '.....
        
    End If

End Sub

Share this post


Link to post
Share on other sites
Guest miguelfreitas

Boas KeepItSimple,

Já dá, bem, mais ou menos, quase, dá-me este erro :

http://img156.imageshack.us/img156/2311/erroyy.jpg

Vamos supor, tenho 10 produtos XPTO, vendo 2 produtos XPTO vou lá e registo a venda de 2 produtos XPTO, fecho, e fez a subtracção correctamente, depois logo a seguir vendia outro 1 produtos XPTO, ia lá registava a venda e pronto, basicamente e resumidamente, quando a quantidade é diferente da ultima vez inserida dá esse erro.

Sabes porque ?

Obrigado,

Miguel Freitas.

Ps: O botão "Guardar registo" e o fechar fazem exactamente o mesmo, ou seja, fazem o correcto, só não deveria aparecer este erro.

Share this post


Link to post
Share on other sites
Guest miguelfreitas

KeepItSimple, obrigado mais uma vez por me ajudares...    :thumbsup:

Fica aqui a resolução do problema para quem precisar :

Opções do Access > Avançadas > Proteção de registos predefinida - mudar para (Registo Editado)

Depois ir ao formulário em que vai ter o botão de vendas e fazer o seguinte :

Propriedades > Dados > Protecções de Registos - mudar para (Registo Modificado)

e depois o código do botão é o seguite :

Private Sub Comando3_Click()
    Dim xREF
    Dim xQT
   
    xREF = Me.ref
    xQT = Me.qt

    If MsgBox("Pretende confirmar a venda ?", vbYesNo) = vbYes Then
        DoCmd.RunSQL ("INSERT INTO vendas (ref,qt) VALUES ('" & xREF & "'," & xQT & ")")
        DoCmd.RunSQL ("UPDATE add_produtos SET stock1 = stock1 - " & xQT & " WHERE ref='" & xREF & "'")
    End If

    DoCmd.Close
End Sub

Obrigado  :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
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.