Jump to content

Recommended Posts

Posted (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 by Caça
GeSHi
Posted

Obrigado pela resposta.

Ficaria assim então ?

cmd = New SqlCeCommand("UPDATE Produtos SET Quantidade = Quantidade - '" & QuantidadeTextBox.Text & "' WHERE Quantidade = '" & b & "'", conn)
Posted

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

Posted (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 by Caça
GeSHi
Posted

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

Posted (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 by Caça

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.