none
Actualizar dos tablas de sql server con visual basic

    Pregunta

  • Buenos dias,<o:p></o:p>

    Estoy desarrollando un software de ventas, y en el formulario de ventas tengo un gran inconveniente con los datos ingresados en el datagridview donde voy agregando todos los productos de la factura, necesito que al guardar la factura me actualice dos tablas de sql server que es la base de datos que estoy utilizando actualmente, lo que quiero es que me guarde el detalle de venta en la tabla "detalle_venta" pero que también me actualice el stock de inventario de la tabla "productos" . Sin embargo cuando deseo que se actualicen ambas tablas me dice que no se puede,  y si por ejemplo desactivo una función y dejo una para que solo me guarde los productos en "detalle_venta" pues funciona correctamente...<o:p></o:p>

    Pero la idea es que me pueda guardar los productos en la tabla "detalle_venta" y pueda actualizar el stock de la tabla de "productos" estuve leyendo a que se debe este error, dice que Sql Server marca este error justamente cuando se desea actualizar mas de 1 tablas a la misma vez,  pero quizás hay una forma de poder solucionar ese error.<o:p></o:p>

    ¿alguien tiene alguna idea de como resolver esto?  <o:p></o:p>

    Muchas gracias...! <o:p></o:p>



    miércoles, 26 de octubre de 2016 13:41

Respuestas

  • Hola:

    Los pasos de el proceso son los siguientes
    1.- Se abre la conexion
    2.- Se inicia una transaccion
    3.- Se inserta 1 registro en la tabla detalle_venta
    4.- Se modifica el campo STOCK de la tabla productos
    5.- Si no hay errores, se cierra la transaccion

            Try
               Dim lsQuery As String="Insert Into detalle_venta (Campo1, Campo2) Values (@Campo1, @Campo2)"
                Using loConexion As New SqlConnection(TU_CADENA_DE_CONEXION)
                    loConexion.Open()   ' abrir conexión
                    'Iniciamos una transaccion
                    Using MiTransaccion As New Transactions.TransactionScope
                        Using loComando As New SqlCommand(lsQuery, loConexion)
                            'añadir parametros al comando
                            loComando.Parameters.Add(New SqlParameter("@Campo1", txtCampo1.Text))
                            loComando.Parameters.Add(New SqlParameter("@Campo2", txtCampo2.Text))
                            loComando.ExecuteNonQuery()
                        End Using

                        lsQuery = "Update PRODUCTOS Set STOCK=STOCK-@Detalle Where ID_PRODUCTO=@ID"
                        Using loComando As New SqlCommand(lsQuery, loConexion)
                            loComando.Parameters.Add(New SqlParameter("@Detalle", VALOR_DEL_DETALLE_VENTA))
                            loComando.Parameters.Add(New SqlParameter("@ID", VALOR_DEL_IDENTIFICADOR_PRODUCTO))
                            loComando.ExecuteNonQuery()
                        End Using
                        MiTransaccion.Complete()
                    End Using
                End Using
            Catch Exp As Exception
                MessageBox.Show(Exp.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try

                     

    Un saludo desde Bilbo
    Carlos
    miércoles, 26 de octubre de 2016 20:51

Todas las respuestas

  • Hola:

    Los pasos de el proceso son los siguientes
    1.- Se abre la conexion
    2.- Se inicia una transaccion
    3.- Se inserta 1 registro en la tabla detalle_venta
    4.- Se modifica el campo STOCK de la tabla productos
    5.- Si no hay errores, se cierra la transaccion

            Try
               Dim lsQuery As String="Insert Into detalle_venta (Campo1, Campo2) Values (@Campo1, @Campo2)"
                Using loConexion As New SqlConnection(TU_CADENA_DE_CONEXION)
                    loConexion.Open()   ' abrir conexión
                    'Iniciamos una transaccion
                    Using MiTransaccion As New Transactions.TransactionScope
                        Using loComando As New SqlCommand(lsQuery, loConexion)
                            'añadir parametros al comando
                            loComando.Parameters.Add(New SqlParameter("@Campo1", txtCampo1.Text))
                            loComando.Parameters.Add(New SqlParameter("@Campo2", txtCampo2.Text))
                            loComando.ExecuteNonQuery()
                        End Using

                        lsQuery = "Update PRODUCTOS Set STOCK=STOCK-@Detalle Where ID_PRODUCTO=@ID"
                        Using loComando As New SqlCommand(lsQuery, loConexion)
                            loComando.Parameters.Add(New SqlParameter("@Detalle", VALOR_DEL_DETALLE_VENTA))
                            loComando.Parameters.Add(New SqlParameter("@ID", VALOR_DEL_IDENTIFICADOR_PRODUCTO))
                            loComando.ExecuteNonQuery()
                        End Using
                        MiTransaccion.Complete()
                    End Using
                End Using
            Catch Exp As Exception
                MessageBox.Show(Exp.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try

                     

    Un saludo desde Bilbo
    Carlos
    miércoles, 26 de octubre de 2016 20:51
  • Muchas gracias, Carlos me ha sido de mucha ayuda lo que me has dicho!
    jueves, 27 de octubre de 2016 2:04