Jump to content
tiagom91

Fazer decremento das vendas dos produtos

Recommended Posts

tiagom91

Olá a todos,

Como posso fazer o decremento das vendas?

posso fazer um update juntamente com o select?

     Try
                Dim SQL As String = "Insert into venderprodutos ( codigoproduto, codigocliente, quantidade, preço, data, tipopagamento, nºTalao) values  ( @codigoproduto, @codigocliente, @quantidade, @preço, @data, @tipopagamento, @nºTalao);"
                Dim SQL1 As String = "UPDATE produtos SET  "
                Dim connection As New OleDbConnection(ConnectionString)
                Dim command As New OleDbCommand(SQL, connection)

                command.Parameters.Add("@codigoproduto", OleDbType.VarChar).Value = DataGridView1.Item("Column2", Linhas).Value
                command.Parameters.Add("@codgocliente", OleDbType.VarChar).Value = DataGridView1.Item("Column3", Linhas).Value
                command.Parameters.Add("@quantidade", OleDbType.VarChar).Value = DataGridView1.Item("Column4", Linhas).Value
                command.Parameters.Add("@preço", OleDbType.VarChar).Value = DataGridView1.Item("Column5", Linhas).Value
                command.Parameters.Add("@data", OleDbType.VarChar).Value = DataGridView1.Item("Column6", Linhas).Value
                command.Parameters.Add("@tipopagamento", OleDbType.VarChar).Value = DataGridView1.Item("Column7", Linhas).Value
                command.Parameters.Add("@nºtalao", OleDbType.VarChar).Value = DataGridView1.Item("Column1", Linhas).Value
                connection.Open()

                Dim x As Integer = command.ExecuteNonQuery()
                If x < 1 Then
                    MessageBox.Show("A operação efectuada não retomou qualquer resultado.")
                End If
                connection.Close()
                connection = Nothing
                command = Nothing
            Catch ex As SyntaxErrorException
            End Try
        Next

Share this post


Link to post
Share on other sites
Caça
UPDATE TABELA SET QTD = QTD - 1 WHERE ID = @ID


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
tiagom91

Mas tipo, tenho que ir buscar a variável da quantidade vendida do produto certo?

mas se vender 2 produtos diferentes? :S

Share this post


Link to post
Share on other sites
Caça

Mas tipo, tenho que ir buscar a variável da quantidade vendida do produto certo?

mas se vender 2 produtos diferentes? :S

Suponho que tens o código do produto e quantidade a sair na Grid, certo?


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Caça

Então só tens de passar esses valores para a query.


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
tiagom91

Tipo assim :

UPDATE produtos  SET quantidade = quantidade -  " ''& DataGridView1.Item("Quantidade", Linhas).Value  &' " WHERE codigoproduto =" ''& DataGridView1.Item("codigoproduto", Linhas).Value  &' " 

Share this post


Link to post
Share on other sites
Caça

Não, está com erros, seria antes assim

Dim SQL As String = "UPDATE produtos  SET quantidade = quantidade -  " & DataGridView1.Item("Quantidade", Linhas).Value.ToString()  & " WHERE codigoproduto = '" & DataGridView1.Item("codigoproduto", Linhas).Value.ToString()  & "'"

Isto caso o campo codigoproduto não seja numérico, caso contrário seria

Dim SQL As String = "UPDATE produtos  SET quantidade = quantidade -  " & DataGridView1.Item("Quantidade", Linhas).Value.ToString()  & " WHERE codigoproduto = " & DataGridView1.Item("codigoproduto", Linhas).Value.ToString()  


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
tiagom91

Dá o seguinte erro no executeScalar : Não foi fornecido nenhum valor para um ou mais parâmetros necessários.

 For Linhas As Integer = 0 To DataGridView1.RowCount - 2
            Try
                Dim SQL As String = "Insert into venderprodutos ( codigoproduto, codigocliente, quantidade, preço, data, tipopagamento, nºTalao) values  ( @codigoproduto, @codigocliente, @quantidade, @preço, @data, @tipopagamento, @nºTalao);"
                Dim SQL1 As String = "UPDATE produtos  SET quantidade = quantidade -  " & DataGridView1.Item("Column6", Linhas).Value.ToString() & " WHERE codigoproduto = " & DataGridView1.Item("Column2", Linhas).Value.ToString()
                Dim connection As New OleDbConnection(ConnectionString)
                Dim command As New OleDbCommand(SQL, connection)
                Dim command1 As New OleDbCommand(SQL1, connection)
                command.Parameters.Add("@codigoproduto", OleDbType.VarChar).Value = DataGridView1.Item("Column2", Linhas).Value
                command.Parameters.Add("@codgocliente", OleDbType.VarChar).Value = DataGridView1.Item("Column3", Linhas).Value
                command.Parameters.Add("@quantidade", OleDbType.VarChar).Value = DataGridView1.Item("Column4", Linhas).Value
                command.Parameters.Add("@preço", OleDbType.VarChar).Value = DataGridView1.Item("Column5", Linhas).Value
                command.Parameters.Add("@data", OleDbType.VarChar).Value = DataGridView1.Item("Column6", Linhas).Value
                command.Parameters.Add("@tipopagamento", OleDbType.VarChar).Value = DataGridView1.Item("Column7", Linhas).Value
                command.Parameters.Add("@nºtalao", OleDbType.VarChar).Value = DataGridView1.Item("Column1", Linhas).Value
                connection.Open()
                command1.ExecuteScalar()
                Dim x As Integer = command.ExecuteNonQuery()
                If x < 1 Then
                    MessageBox.Show("A operação efectuada não retomou qualquer resultado.")
                End If
                connection.Close()
                connection = Nothing
                command = Nothing
            Catch ex As SyntaxErrorException
            End Try
        Next

Share this post


Link to post
Share on other sites
Caça

Não é ExecuteScalar mas sim ExecuteNonQuery.

Certifica-te que isso está preenchido


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
tiagom91

Já alterei, mas dá na mesma o erro e estou a preencher todo do grid.

Share this post


Link to post
Share on other sites
Caça

Eu acho que o erro é bem claro...


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
tiagom91

Como assim? tinha ali um erro no nome da coluna que não era a 6 mas sim a 4 =)

Share this post


Link to post
Share on other sites
Caça

E agora, como é que está?


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
tiagom91

dá o mesmo erro :S

For Linhas As Integer = 0 To DataGridView1.RowCount - 2
            Try
                Dim SQL As String = "Insert into venderprodutos ( codigoproduto, codigocliente, quantidade, preço, data, tipopagamento, nºTalao) values  ( @codigoproduto, @codigocliente, @quantidade, @preço, @data, @tipopagamento, @nºTalao);"
                Dim SQL1 As String = "UPDATE produtos  SET quantidade = quantidade -  " & DataGridView1.Item("Column4", Linhas).Value() & " WHERE codigoproduto = '" & DataGridView1.Item("Column2", Linhas).Value() & "'"

                Dim connection As New OleDbConnection(ConnectionString)
                Dim command As New OleDbCommand(SQL, connection)
                Dim command1 As New OleDbCommand(SQL1, connection)
                command.Parameters.Add("@codigoproduto", OleDbType.VarChar).Value = DataGridView1.Item("Column2", Linhas).Value
                command.Parameters.Add("@codgocliente", OleDbType.VarChar).Value = DataGridView1.Item("Column3", Linhas).Value
                command.Parameters.Add("@quantidade", OleDbType.VarChar).Value = DataGridView1.Item("Column4", Linhas).Value
                command.Parameters.Add("@preço", OleDbType.VarChar).Value = DataGridView1.Item("Column5", Linhas).Value
                command.Parameters.Add("@data", OleDbType.VarChar).Value = DataGridView1.Item("Column6", Linhas).Value
                command.Parameters.Add("@tipopagamento", OleDbType.VarChar).Value = DataGridView1.Item("Column7", Linhas).Value
                command.Parameters.Add("@nºtalao", OleDbType.VarChar).Value = DataGridView1.Item("Column1", Linhas).Value
                connection.Open()
                command1.ExecuteNonQuery()
                Dim x As Integer = command.ExecuteNonQuery()
                If x < 1 Then
                    MessageBox.Show("A operação efectuada não retomou qualquer resultado.")
                End If
                connection.Close()
                connection = Nothing
                command = Nothing
            Catch ex As SyntaxErrorException
            End Try
        Next

Share this post


Link to post
Share on other sites
Caça

Qual é o tipo de dados dos campos quantidade e codigoproduto?

Já experimentaste colocar as plicas na quantidade?


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
tiagom91

Tirei as parênteses ai update e já não da nenhum erro, mas não altera a quantidade na bd :S

 For Linhas As Integer = 0 To DataGridView1.RowCount - 2
            Try
                Dim SQL As String = "Insert into venderprodutos ( codigoproduto, codigocliente, quantidade, preço, data, tipopagamento, nºTalao) values  ( @codigoproduto, @codigocliente, @quantidade, @preço, @data, @tipopagamento, @nºTalao);"
                Dim SQL1 As String = "UPDATE produtos  SET quantidade = quantidade -  " & DataGridView1.Item("Column4", Linhas).Value.ToString & " WHERE codigoproduto = '" & DataGridView1.Item("Column2", Linhas).Value.ToString & "'"

                Dim connection As New OleDbConnection(ConnectionString)
                Dim command As New OleDbCommand(SQL, connection)
                Dim command1 As New OleDbCommand(SQL1, connection)
                command.Parameters.Add("@codigoproduto", OleDbType.VarChar).Value = DataGridView1.Item("Column2", Linhas).Value
                command.Parameters.Add("@codgocliente", OleDbType.VarChar).Value = DataGridView1.Item("Column3", Linhas).Value
                command.Parameters.Add("@quantidade", OleDbType.VarChar).Value = DataGridView1.Item("Column4", Linhas).Value
                command.Parameters.Add("@preço", OleDbType.VarChar).Value = DataGridView1.Item("Column5", Linhas).Value
                command.Parameters.Add("@data", OleDbType.VarChar).Value = DataGridView1.Item("Column6", Linhas).Value
                command.Parameters.Add("@tipopagamento", OleDbType.VarChar).Value = DataGridView1.Item("Column7", Linhas).Value
                command.Parameters.Add("@nºtalao", OleDbType.VarChar).Value = DataGridView1.Item("Column1", Linhas).Value
                connection.Open()
                'command1.ExecuteNonQuery()
                Dim x As Integer = command.ExecuteNonQuery()
                If x < 1 Then
                    MessageBox.Show("A operação efectuada não retomou qualquer resultado.")
                End If
                connection.Close()
                connection = Nothing
                command = Nothing
            Catch ex As SyntaxErrorException
            End Try
        Next

Share this post


Link to post
Share on other sites
tiagom91

Outro erro :S

Campo da coluna produtos não é quantidade mas sim "QuantidadeStock"

 Dim SQL1 As String = "UPDATE produtos  SET QuantidadeStock = QuantidadeStock -  " & DataGridView1.Item("Column4", Linhas).Value & " WHERE codigoproduto = '" & DataGridView1.Item("Column2", Linhas).Value & "'"

dá o seguinte erro: Tipo de dados incorrecto na expressão de critérios.

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

×
×
  • 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.