none
Restar valor decimal RRS feed

  • Pregunta

  • Buenas tardes, estoy tratando de restar un valor decimal o interger a un campo decimal(18,2) en SQL.

    La forma que trato de hacerlo es la siguiente:

                   Try
                        Using cn As New SqlConnection(strCadenaConexion)
    
                            Dim ConsultaSQL As String = "UPDATE Productos SET CantidadStock -= @cantidad WHERE (Id_producto = @IdProducto)"
    
                            cn.Open()
                            For Each Fila As DataGridViewRow In DgvVenta.Rows
                                If Not Fila.IsNewRow Then
                                    Dim cmd As New SqlCommand(ConsultaSQL, cn)
                                    If Fila.Cells("Column4").Value.ToString.Contains(",") Then
                                        Dim valor As Decimal = (Fila.Cells("Column4").Value)
                                        cmd.Parameters.AddWithValue("@cantidad", CDec(valor))
                                    Else
                                        cmd.Parameters.AddWithValue("@cantidad", CInt(Fila.Cells("Column4").Value))
    
                                    End If
                                    valor = Nothing
                                    cmd.Parameters.AddWithValue("@IdProducto", CInt(Fila.Cells("Column5").Value))
                                    cmd.ExecuteNonQuery()
                                End If
                            Next

    Pero al ejecutarse no se refleja la resta en la base. 

    A que se puede deber?

    Saludos

    -----------------------------------------------------------------------------------

    SOLUCIÓN ENCONTRADA, NO SELECCIONABA EL ID


    viernes, 8 de septiembre de 2017 17:12

Respuestas

  • No veo razón aparente para que no pueda producirse la actualización más allá de que la expresión de filtro no resuelva alguna comparación como verdadera.

    Por otro lado, no necesitas implementar la instrucción condicional, convierte el valor -para cualquier caso- a un tipo decimal.

    For Each Fila As DataGridViewRow In DgvVenta.Rows
    	If Not Fila.IsNewRow Then
    		Dim cmd As New SqlCommand(ConsultaSQL, cn)
    
    		cmd.Parameters.AddWithValue("@cantidad", CDec(Fila.Cells("Column4").Value))
    		cmd.Parameters.AddWithValue("@IdProducto", CInt(Fila.Cells("Column5").Value))
    		cmd.ExecuteNonQuery()
    	End If
    Next


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Marcado como respuesta Federico32113 sábado, 9 de septiembre de 2017 20:14
    viernes, 8 de septiembre de 2017 23:31

Todas las respuestas

  • Buenas tardes, estoy tratando de restar un valor decimal o interger a un campo decimal(18,2) en SQL.

    La forma que trato de hacerlo es la siguiente:

                   Try
                        Using cn As New SqlConnection(strCadenaConexion)
    
                            Dim ConsultaSQL As String = "UPDATE Productos SET CantidadStock = CantidadStock -@cantidad WHERE (Id_producto = @IdProducto)"
    
                            cn.Open()
                            For Each Fila As DataGridViewRow In DgvVenta.Rows
                                If Not Fila.IsNewRow Then
                                    Dim cmd As New SqlCommand(ConsultaSQL, cn)
                                    If Fila.Cells("Column4").Value.ToString.Contains(",") Then
                                        Dim valor As Decimal = (Fila.Cells("Column4").Value)
                                        cmd.Parameters.AddWithValue("@cantidad", CDec(valor))
                                    Else
                                        cmd.Parameters.AddWithValue("@cantidad", CInt(Fila.Cells("Column4").Value))
    
                                    End If
                                    valor = Nothing
                                    cmd.Parameters.AddWithValue("@IdProducto", CInt(Fila.Cells("Column5").Value))
                                    cmd.ExecuteNonQuery()
                                End If
                            Next

    Pero al ejecutarse no se refleja la resta en la base. 

    A que se puede deber?

    Saludos



    Pasa los puntos prro v:

    viernes, 8 de septiembre de 2017 17:23
  • No veo razón aparente para que no pueda producirse la actualización más allá de que la expresión de filtro no resuelva alguna comparación como verdadera.

    Por otro lado, no necesitas implementar la instrucción condicional, convierte el valor -para cualquier caso- a un tipo decimal.

    For Each Fila As DataGridViewRow In DgvVenta.Rows
    	If Not Fila.IsNewRow Then
    		Dim cmd As New SqlCommand(ConsultaSQL, cn)
    
    		cmd.Parameters.AddWithValue("@cantidad", CDec(Fila.Cells("Column4").Value))
    		cmd.Parameters.AddWithValue("@IdProducto", CInt(Fila.Cells("Column5").Value))
    		cmd.ExecuteNonQuery()
    	End If
    Next


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Marcado como respuesta Federico32113 sábado, 9 de septiembre de 2017 20:14
    viernes, 8 de septiembre de 2017 23:31