Usuário com melhor resposta
como criar histórico de estoque

Pergunta
-
Saudações a todos.
eu tenho um estoque onde cadastro a entrada de produtos, porem se eu adicionar o mesmo produto em outra data ele soma no produto existente mas não grava a nova data. logo eu fico sem saber se os produtos foram adicionados em que data segue o código de salvar e atualizar:
Using con As OleDbConnection = getConnection()
Dim total As Integer
con.Open()
Try
'esta variavel consulta a quantidade que tem no estoque
total = ObterProdutoEstoque(txtProduto.Text)
If total = 0 Then
Dim sql As String = "INSERT INTO Tab_Estoque (Produto,Quantidade,Tamanho,Data_Entrada,Total) VALUES (?,?,?,?,?)"
Dim cmd As OleDbCommand = New OleDbCommand(sql, con)
cmd.Parameters.Add(New OleDb.OleDbParameter("@Produto", txtProduto.Text))
cmd.Parameters.Add(New OleDb.OleDbParameter("@Quantidade", txtQuantidade.Text))
cmd.Parameters.Add(New OleDb.OleDbParameter("@Tamanho", txtTamanho.Text))
cmd.Parameters.Add(New OleDb.OleDbParameter("@Data", txtDataEstoque.Text))
cmd.Parameters.Add(New OleDb.OleDbParameter("@Total", txtQuantidade.Text))
cmd.ExecuteNonQuery()
MsgBox("PRODUTO INSERIDO COM SUCESSO NO ESTOQUE", MsgBoxStyle.Information, Title:="Sucesso!")
txtTotal.Text = txtQuantidade.Text
Else
total = Val(total + txtQuantidade.Text)
Dim sql As String = "UPDATE Tab_Estoque SET Total='" & total & "'" & " WHERE Produto='" & txtProduto.Text & "'"
Dim cmd As OleDbCommand = New OleDbCommand(sql, con)
cmd.ExecuteNonQuery()
MsgBox("ESTOQUE ATUALIZADO COM SUCESSO NO ESTOQUE", MsgBoxStyle.Information, Title:="Sucesso!")
txtTotal.Text = total
End If
Catch ex As Exception
MsgBox(ex.Message)
Finally
con.Close()
End Try
Respostas
-
Cara,
Os exemplos dados aqui não estão prontos, precisam ser interpretados.
Você já fez algum tipo de consulta SQL no VB.NET? Então sabe que não pode jogar um comando SQL dentro de um evento de click de botão sem ao menos utilizar os objetos para trabalhar com SQL no VB.
Caso não saiba como faz, recomendo dar uma estudada em alguns materiais para poder prosseguir, por exemplo: http://www.macoratti.net/vbn5_adb.htm
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor
Blog: http://andresecco.com.br
GitHub: http://github.com/andreluizsecco
Twitter: @andre_secco- Sugerido como Resposta Robson William SilvaModerator segunda-feira, 31 de outubro de 2016 19:00
- Marcado como Resposta Robson William SilvaModerator segunda-feira, 31 de outubro de 2016 20:17
Todas as Respostas
-
Olá Arlindo
Perceba que a sua condição faz com que seu código sempre caia no "else" se houver o produto cadastrado e o código que está dentro do bloco "else" é para atualizar os dados (UPDATE) e não inserir um novo, por esse motivo está somando e causando o problema que mencionou.
Acredito que sempre tenha que inserir um registro para não perder o histórico. Caso precise de uma consulta que retorne a quantidade de produtos em uma data específica, consegue fazer essa soma agrupando por data e produto de forma bem tranquilo com SQL
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor
Blog: http://andresecco.com.br
GitHub: http://github.com/andreluizsecco
Twitter: @andre_secco- Editado André SeccoMVP segunda-feira, 31 de outubro de 2016 15:41
-
-
O que você quer?
Quer que ele sempre insira um novo registro como mencionei?Basta remover a condição if/else
Using con As OleDbConnection = getConnection() Dim total As Integer con.Open() Try Dim sql As String = "INSERT INTO Tab_Estoque (Produto,Quantidade,Tamanho,Data_Entrada,Total) VALUES (?,?,?,?,?)" Dim cmd As OleDbCommand = New OleDbCommand(sql, con) cmd.Parameters.Add(New OleDb.OleDbParameter("@Produto", txtProduto.Text)) cmd.Parameters.Add(New OleDb.OleDbParameter("@Quantidade", txtQuantidade.Text)) cmd.Parameters.Add(New OleDb.OleDbParameter("@Tamanho", txtTamanho.Text)) cmd.Parameters.Add(New OleDb.OleDbParameter("@Data", txtDataEstoque.Text)) cmd.Parameters.Add(New OleDb.OleDbParameter("@Total", txtQuantidade.Text)) cmd.ExecuteNonQuery() MsgBox("PRODUTO INSERIDO COM SUCESSO NO ESTOQUE", MsgBoxStyle.Information, Title:="Sucesso!") txtTotal.Text = txtQuantidade.Text Catch ex As Exception MsgBox(ex.Message) Finally con.Close() End Try
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor
Blog: http://andresecco.com.br
GitHub: http://github.com/andreluizsecco
Twitter: @andre_secco -
-
Ok, se entendi bem então você não quer guardar um histórico de cada atualização.
Se o produto já existir, quer somar a quantidade e atualizar a data dessa nova atualização, isso?
Se for isso, então pode fazer assim:
Using con As OleDbConnection = getConnection() Dim total As Integer con.Open() Try 'esta variavel consulta a quantidade que tem no estoque total = ObterProdutoEstoque(txtProduto.Text) If total = 0 Then Dim sql As String = "INSERT INTO Tab_Estoque (Produto,Quantidade,Tamanho,Data_Entrada,Total) VALUES (?,?,?,?,?)" Dim cmd As OleDbCommand = New OleDbCommand(sql, con) cmd.Parameters.Add(New OleDb.OleDbParameter("@Produto", txtProduto.Text)) cmd.Parameters.Add(New OleDb.OleDbParameter("@Quantidade", txtQuantidade.Text)) cmd.Parameters.Add(New OleDb.OleDbParameter("@Tamanho", txtTamanho.Text)) cmd.Parameters.Add(New OleDb.OleDbParameter("@Data", txtDataEstoque.Text)) cmd.Parameters.Add(New OleDb.OleDbParameter("@Total", txtQuantidade.Text)) cmd.ExecuteNonQuery() MsgBox("PRODUTO INSERIDO COM SUCESSO NO ESTOQUE", MsgBoxStyle.Information, Title:="Sucesso!") txtTotal.Text = txtQuantidade.Text Else total = Val(total + txtQuantidade.Text) Dim sql As String = "UPDATE Tab_Estoque SET Total='" & total & "', Data_Entrada='" & DateTime.Now.ToString() & "' WHERE Produto='" & txtProduto.Text & "'" Dim cmd As OleDbCommand = New OleDbCommand(sql, con) cmd.ExecuteNonQuery() MsgBox("ESTOQUE ATUALIZADO COM SUCESSO NO ESTOQUE", MsgBoxStyle.Information, Title:="Sucesso!") txtTotal.Text = total End If Catch ex As Exception MsgBox(ex.Message) Finally con.Close() End Try
Isso fará com que atualize a quantidade e altere a data para a data atual da atualização do produto
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor
Blog: http://andresecco.com.br
GitHub: http://github.com/andreluizsecco
Twitter: @andre_secco
- Editado André SeccoMVP segunda-feira, 31 de outubro de 2016 16:11
-
boa tare mais uma vez André,
eu gostaria de manter um histórico com base na data quando eu inseri cada dados exemplo;
no dia 01/01/2016 eu inserir produto = teclado, quantidade =5 total no estoque =5
no dia 31/10/2016 eu inserir produto = teclado, quantidade =3 total no estoque =8
quando eu pesquisar o produto teclado ele mostrar o histórico acima,
será que consegui expressar o que desejo?
-
Então Arlindo,
Acredito não ser uma modelagem correta deixar a coluna Total na tabela. Na minha visão, como falei no início, você deveria apenas inserir novos registros nessa tabela, identificando o produto, data e a quantidade.
Caso queira saber o total, deve fazer uma consulta sql que agrupe por produtos, exemplo:
SELECT Produto, SUM(Quantidade) FROM Tab_Estoque GROUP BY Produto //PARA TER O EFEITO QUE QUER COM O TOTAL, PODE FAZER ASSIM: SELECT Data_Entrada, Produto, SUM(Quantidade), Total.Quantidade FROM Tab_Estoque te CROSS APPLY (SELECT SUM(Quantidade) AS Quantidade FROM Tab_Estoque WHERE Produto = te.Produto AND Data_Entrada <= te.Data_Entrada) Total GROUP BY Data_Entrada, Produto, Total.Quantidade
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor
Blog: http://andresecco.com.br
GitHub: http://github.com/andreluizsecco
Twitter: @andre_secco -
-
-
Qual o erro? Como está montando aí?
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor
Blog: http://andresecco.com.br
GitHub: http://github.com/andreluizsecco
Twitter: @andre_secco -
-
Cara,
Os exemplos dados aqui não estão prontos, precisam ser interpretados.
Você já fez algum tipo de consulta SQL no VB.NET? Então sabe que não pode jogar um comando SQL dentro de um evento de click de botão sem ao menos utilizar os objetos para trabalhar com SQL no VB.
Caso não saiba como faz, recomendo dar uma estudada em alguns materiais para poder prosseguir, por exemplo: http://www.macoratti.net/vbn5_adb.htm
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor
Blog: http://andresecco.com.br
GitHub: http://github.com/andreluizsecco
Twitter: @andre_secco- Sugerido como Resposta Robson William SilvaModerator segunda-feira, 31 de outubro de 2016 19:00
- Marcado como Resposta Robson William SilvaModerator segunda-feira, 31 de outubro de 2016 20:17