none
Acumular y restar en una base SQL

    Pregunta

  • Buenas, estoy haciendo un proyecto para un minimercado con Base SQL, mi duda es como puedo hacer para acumular los valores(cantidadstock) para luego restar la cantidad que corresponde a cada producto segun la venta.

    De esta manera intento restar la cantidadstock de cada producto pero no logro obtener los datos:  

    Dim ConsultaSQL As String = "UPDATE Productos SET CantidadStock -= @cantidad WHERE (Id_producto = @IdProducto)" Dim cmd As New SqlCommand(ConsultaSQL, cn)

      cmd.Parameters.AddWithValue("@cantidad", cantidad2)
                    cmd.Parameters.AddWithValue("@IdProducto", producto2)

    Para agregar el producto lo hago a travez de un boton, el valor de la cantidad se ingresa desde un textbox

    Solo comenten si es necesario algo mas para que puedan comprenderme

    Desde ya gracias.



    • Editado Laura321 lunes, 9 de enero de 2017 23:44
    lunes, 9 de enero de 2017 22:58

Respuestas

  • Laura321,

    ¿Este proyecto es el mismo que del usuario Federico32113? o ¿se trata de la misma persona pero con diferente cuenta?. Lo pregunto porque es bueno guardar la correlación del proyecto para orientar mejor la solución.

    Bueno, se entiende que el momento en que se actualizan los inventarios es cuando se confirma la venta (o cuando se guarda la venta), en cuyo caso, una vez se han validado los ingresos se procede a restar las unidades vendidas del inventario actual: fila por fila, y para conseguir ello el camino es harto conocido, abrir una conexión, recorrer las filas de la grilla y ejecutar un comando de actualización por cada fila (un paso adelante es persistir la cabecera del documento y las filas como una única operación):

    Using cn As New SqlConnection("Cadena de conexión")
    	Dim ConsultaSQL As String = "UPDATE Productos SET CantidadStock -= @cantidad 
    		WHERE (Id_producto = @IdProducto)"
    
    	cn.Open()
    
    	For Each Fila As DataGridViewRow In DataGridView1.Rows
    		If Not Fila.IsNewRow Then
    			Dim cmd As New SqlCommand(ConsultaSQL, cn)
    
    			cmd.Parameters.AddWithValue("@cantidad", CInt(Fila.Cells("Cantidad").Value))
    			cmd.Parameters.AddWithValue("@IdProducto", CInt(Fila.Cells("IdProducto").Value))
    
    			cmd.ExecuteNonQuery()
    		End If
    	Next
    
    End Using


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Laura321 martes, 10 de enero de 2017 3:05
    martes, 10 de enero de 2017 1:47

Todas las respuestas

  • Laura321,

    ¿Este proyecto es el mismo que del usuario Federico32113? o ¿se trata de la misma persona pero con diferente cuenta?. Lo pregunto porque es bueno guardar la correlación del proyecto para orientar mejor la solución.

    Bueno, se entiende que el momento en que se actualizan los inventarios es cuando se confirma la venta (o cuando se guarda la venta), en cuyo caso, una vez se han validado los ingresos se procede a restar las unidades vendidas del inventario actual: fila por fila, y para conseguir ello el camino es harto conocido, abrir una conexión, recorrer las filas de la grilla y ejecutar un comando de actualización por cada fila (un paso adelante es persistir la cabecera del documento y las filas como una única operación):

    Using cn As New SqlConnection("Cadena de conexión")
    	Dim ConsultaSQL As String = "UPDATE Productos SET CantidadStock -= @cantidad 
    		WHERE (Id_producto = @IdProducto)"
    
    	cn.Open()
    
    	For Each Fila As DataGridViewRow In DataGridView1.Rows
    		If Not Fila.IsNewRow Then
    			Dim cmd As New SqlCommand(ConsultaSQL, cn)
    
    			cmd.Parameters.AddWithValue("@cantidad", CInt(Fila.Cells("Cantidad").Value))
    			cmd.Parameters.AddWithValue("@IdProducto", CInt(Fila.Cells("IdProducto").Value))
    
    			cmd.ExecuteNonQuery()
    		End If
    	Next
    
    End Using


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Laura321 martes, 10 de enero de 2017 3:05
    martes, 10 de enero de 2017 1:47
  • Si, soy Federico32113 estoy con otro cuenta ya que con ella tuve un inconveniente no puedo utilizarla, estoy tratando de recuperarla mientras tanto uso esta.

    La respuesta me sirvió, Gracias.

    martes, 10 de enero de 2017 3:05