vascoc Posted June 11, 2012 at 03:49 PM Report #462004 Posted June 11, 2012 at 03:49 PM (edited) Boas, eu tenho um programa que insere produtos, clientes e regista as vendas, mas agora tenho um problema que agora sempre que insiro uma nova venda a quantidade que vendo não desconta na quantidade do produto em stock, eis o código: Valores na database http://img259.imageshack.us/img259/3192/dfedfdf.png Imaginamos que insiro 6 na quantidade, devia de retirar esse valor depois na base de dados e ficar 14. sql2 = "select Quantidade from Produtos where CodProduto = " & CodProdutoComboBox.Text.Split("|")(0).Trim procura_produto() Dim b As Integer Dim f As Integer = ds.Tables("consulta").Rows(0).Item(3) If f < QuantidadeTextBox.Text Then MsgBox("Quantidade superior à existente em stock") Else a = MessageBox.Show("Tem a certeza que pertende inserir o registo selecionado?", "Inserir", MessageBoxButtons.OKCancel) If a = MsgBoxResult.Ok Then Try con = New SqlCeConnection(My.Settings.InformáticaConnectionString) cmd = New SqlCeCommand("Select * from Vendas order by CodVenda", con) da = New SqlCeDataAdapter(cmd) ds = New DataSet() With con If .State = ConnectionState.Open Then 'ta aberto .Close() ' fechamos End If .Open() ' abrimos a conexao End With da.Fill(ds, "consulta") cb = New SqlCeCommandBuilder(da) Catch ex As Exception MessageBox.Show(ex.Message, "informação do Sistema", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try tr = ds.Tables("consulta").Rows.Count Dim dsnewrow As DataRow dsnewrow = ds.Tables("consulta").NewRow() dsnewrow.Item("CodVenda") = CodVendaTextBox.Text dsnewrow.Item("CodCliente") = CodClienteComboBox.Text.Split("|")(0).Trim dsnewrow.Item("CodProduto") = CodProdutoComboBox.Text.Split("|")(0).Trim dsnewrow.Item("DataVenda") = DataVendaDateTimePicker.Text dsnewrow.Item("Quantidade") = QuantidadeTextBox.Text dsnewrow.Item("Preco") = PrecototTextBox.Text ds.Tables("consulta").Rows.Add(dsnewrow) da.Update(ds, "consulta") ' O PROBLEMA ESTÁ AQUI, estou a fazer isto mal b = f - QuantidadeTextBox.Text cmd = New SqlCeCommand("Update Produtos SET Quantidade WHERE Quantidade '" & b & "'", con) cmd.Parameters.Add(New SqlServerCe.SqlCeParameter("Quantidade", SqlDbType.NVarChar)).Value = f - QuantidadeTextBox.Text() MessageBox.Show("Registo inserido com sucesso.", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information) con.Close() ' Vendas.Show() End If End If Me.Close() End Sub Edited June 11, 2012 at 04:08 PM by Caça GeSHi
Caça Posted June 11, 2012 at 04:13 PM Report #462010 Posted June 11, 2012 at 04:13 PM Deves ter uma query tipo Update Produtos SET Quantidade = Quantidade - @Quantidade WHERE ID = @ID Pedro Martins Não respondo a duvidas por PM
vascoc Posted June 11, 2012 at 04:20 PM Author Report #462013 Posted June 11, 2012 at 04:20 PM Obrigado pela resposta. Ficaria assim então ? cmd = New SqlCeCommand("UPDATE Produtos SET Quantidade = Quantidade - '" & QuantidadeTextBox.Text & "' WHERE Quantidade = '" & b & "'", conn)
Caça Posted June 11, 2012 at 04:30 PM Report #462015 Posted June 11, 2012 at 04:30 PM Não, assim vão actualizar mais registos do que os que queres, tens de actualizar apenas o do produto que estás a vender WHERE ProdutoID = @ID Pedro Martins Não respondo a duvidas por PM
vascoc Posted June 11, 2012 at 04:35 PM Author Report #462017 Posted June 11, 2012 at 04:35 PM (edited) Assim ? Private Sub cmdgravar_Click(sender As System.Object, e As System.EventArgs) Handles cmdgravar.Click sql2 = "select Quantidade from Produtos where CodProduto = " & CodProdutoComboBox.Text.Split("|")(0).Trim procura_produto() Dim b As Integer Dim f As Integer = ds.Tables("consulta").Rows(0).Item(3) If f < QuantidadeTextBox.Text Then MsgBox("Quantidade superior à existente em stock") Else a = MessageBox.Show("Tem a certeza que pertende inserir o registo selecionado?", "Inserir", MessageBoxButtons.OKCancel) If a = MsgBoxResult.Ok Then Try con = New SqlCeConnection(My.Settings.InformáticaConnectionString) cmd = New SqlCeCommand("Select * from Vendas order by CodVenda", con) da = New SqlCeDataAdapter(cmd) ds = New DataSet() With con If .State = ConnectionState.Open Then 'ta aberto .Close() ' fechamos End If .Open() ' abrimos a conexao End With da.Fill(ds, "consulta") cb = New SqlCeCommandBuilder(da) Catch ex As Exception MessageBox.Show(ex.Message, "informação do Sistema", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try tr = ds.Tables("consulta").Rows.Count Dim dsnewrow As DataRow dsnewrow = ds.Tables("consulta").NewRow() dsnewrow.Item("CodVenda") = CodVendaTextBox.Text dsnewrow.Item("CodCliente") = CodClienteComboBox.Text.Split("|")(0).Trim dsnewrow.Item("CodProduto") = CodProdutoComboBox.Text.Split("|")(0).Trim dsnewrow.Item("DataVenda") = DataVendaDateTimePicker.Text dsnewrow.Item("Quantidade") = QuantidadeTextBox.Text dsnewrow.Item("Preco") = PrecototTextBox.Text ds.Tables("consulta").Rows.Add(dsnewrow) da.Update(ds, "consulta") 'Aqui b = f - QuantidadeTextBox.Text cmd = New SqlCeCommand("UPDATE Produtos SET Quantidade = Quantidade - '" & QuantidadeTextBox.Text & "' WHERE CodProduto = '" & CodProdutoComboBox.Text.Split("|")(0).Trim & "'", conn) MessageBox.Show("Registo inserido com sucesso.", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information) con.Close() ' Vendas.Show() End If End If Me.Close() End Sub Public Sub procura_produto() conn = New SqlCeConnection(My.Settings.InformáticaConnectionString) cmd = New SqlCeCommand(sql2, conn) da = New SqlCeDataAdapter(cmd) ds = New DataSet() With conn If .State = ConnectionState.Open Then .Close() End If .Open() End With da.Fill(ds, "consulta") totalprod = ds.Tables("consulta").Rows.Count End Sub Edited June 11, 2012 at 04:39 PM by Caça GeSHi
Caça Posted June 11, 2012 at 04:40 PM Report #462019 Posted June 11, 2012 at 04:40 PM Vê aqui como utilizar o GeSHi Se CodProdutoComboBox.Text.Split("|")(0).Trim representar o teu código de produto, sim EDIT: Em campos do tipo Int não se usam plicas (') Pedro Martins Não respondo a duvidas por PM
vascoc Posted June 11, 2012 at 05:11 PM Author Report #462025 Posted June 11, 2012 at 05:11 PM (edited) A questão é que tenho assim..e continua sem dar. Imagem e código em baixo. http://img854.imageshack.us/img854/5742/sssssrn.png Private Sub cmdgravar_Click(sender As System.Object, e As System.EventArgs) Handles cmdgravar.Click sql2 = "select Quantidade from Produtos where CodProduto = " & CodProdutoComboBox.Text.Split("|")(0).Trim procura_produto() Dim b As Integer Dim f As Integer = ds.Tables("consulta").Rows(0).Item(3) If f < QuantidadeTextBox.Text Then MsgBox("Quantidade superior à existente em stock") Else a = MessageBox.Show("Tem a certeza que pertende inserir o registo selecionado?", "Inserir", MessageBoxButtons.OKCancel) If a = MsgBoxResult.Ok Then Try con = New SqlCeConnection(My.Settings.InformáticaConnectionString) cmd = New SqlCeCommand("Select * from Vendas order by CodVenda", con) da = New SqlCeDataAdapter(cmd) ds = New DataSet() With con If .State = ConnectionState.Open Then 'ta aberto .Close() ' fechamos End If .Open() ' abrimos a conexao End With da.Fill(ds, "consulta") cb = New SqlCeCommandBuilder(da) Catch ex As Exception MessageBox.Show(ex.Message, "informação do Sistema", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try tr = ds.Tables("consulta").Rows.Count Dim dsnewrow As DataRow dsnewrow = ds.Tables("consulta").NewRow() dsnewrow.Item("CodVenda") = CodVendaTextBox.Text dsnewrow.Item("CodCliente") = CodClienteComboBox.Text.Split("|")(0).Trim dsnewrow.Item("CodProduto") = CodProdutoComboBox.Text.Split("|")(0).Trim dsnewrow.Item("DataVenda") = DataVendaDateTimePicker.Text dsnewrow.Item("Quantidade") = QuantidadeTextBox.Text dsnewrow.Item("Preco") = PrecototTextBox.Text ds.Tables("consulta").Rows.Add(dsnewrow) da.Update(ds, "consulta") b = f - QuantidadeTextBox.Text cmd = New SqlCeCommand("UPDATE Produtos SET Quantidade = Quantidade - " & QuantidadeTextBox.Text & " WHERE CodProduto = " & CodProdutoComboBox.Text.Split("|")(0).Trim & "", conn) ' quantidade_asda() MessageBox.Show("Registo inserido com sucesso.", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information) con.Close() ' Vendas.Show() End If End If Me.Close() End Sub Edited June 12, 2012 at 08:07 AM by Caça
Caça Posted June 12, 2012 at 08:12 AM Report #462100 Posted June 12, 2012 at 08:12 AM Falta-te isto cmd.ExecuteNonQuery() Pedro Martins Não respondo a duvidas por PM
vascoc Posted June 12, 2012 at 08:39 AM Author Report #462105 Posted June 12, 2012 at 08:39 AM Obrigado pela ajuda 🙂 Já funciona.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now