none
Guardar tablas maestro detalle Vb.net RRS feed

  • Pregunta

  • Hola, yo aquí molestando de nuevo...

    tengo 2 tablas una que es la cabecera de la factura y la otra que es el detalle de la factura, la cabecera de la factura la guardo sin ningún problema, cabe destacar que uso procedimientos almacenados al momento de guardar en la base de datos.

    El problema esta en la tabla de detalle de la factura, uso un grid para cargar lo que se esta comprando, pero no logro guardar, este es el ciclo for que utilizo para verificar y recorrer el grid.

     For Each Row As DataGridViewRow In MetroGrid1.Rows
                        If j < i Then
                            Call detallePedido()
                            insertupdate("Exec in_Detalle_Pedido '" & DetPed & "','" & MetroGrid1.Item(2, j).Value & "','" & MetroGrid1.Item(1, j).Value & "','" & MetroGrid1.Item(4, j).Value & "','" & MetroGrid1.Item(6, j).Value & "'")
                        End If
                        j = j + 1
                    Next
                    MsgBox("Pedido Guardado Exitosamente")

    Los campos de la tabla detelle de pedido son:

    Id_pedido

    Producto

    Cantidad

    Precio

    SubTotal

    creo estar haciendo algo mal y no me guarda, por cierto este es el procedimiento almacenado para guardar:

    ALTER PROCEDURE [dbo].[in_Detalle_Pedido]
    (
    	@ID_DET INT,
    	@Producto varchar (50),
    	@Cantidad Varchar (10),
    	@Precio varchar(10),
    	@SubTotal varchar(10)
    
    
    	
    	)
    AS
    	INSERT INTO [Descripcion Pedido]  
    	(Id_pedido ,Producto,   Cantidad, Precio, SubTotal)
    	VALUES
    	(@ID_DET, @Producto, @Cantidad, @Precio, @SubTotal)

    la relacion de las tablas es esta

    a ver si alguien me echa una mano :)


    martes, 14 de febrero de 2017 22:31

Respuestas

  • Hola,que hace el método detallePedido(), deberías recorrer el datagridview e invocar al procedure en cada iteración del for

            Using conn As New SqlConnection("cadena de conexion")
                conn.Open()
    
                For Each Row As DataGridViewRow In MetroGrid1.Rows
                    Using cmd As New SqlCommand("in_Detalle_Pedido", conn)
                        cmd.CommandType = CommandType.StoredProcedure
                        cmd.Parameters.Clear()
                        cmd.Parameters.AddWithValue("@ID_DET", Convert.ToInt32(DetPed))
                        cmd.Parameters.AddWithValue("@Producto", Convert.ToString(Row.Cells(2).Value))
                        cmd.Parameters.AddWithValue("@Cantidad", Convert.ToString(Row.Cells(1).Value))
                        cmd.Parameters.AddWithValue("@Precio", Convert.ToString(Row.Cells(4).Value))
                        cmd.Parameters.AddWithValue("@SubTotal", Convert.ToString(Row.Cells(6).Value))
                        cmd.ExecuteNonQuery()
    
                    End Using
                Next
            End Using

    Si la respuesta te fue útil vótala como tal,y si fue respuesta márcala. Solo dejo en el foro mis post si fueron útiles , de lo contrario y por mantener el orden los borro. Saludos. Lima-Perú.


    • Editado Augusto1982 martes, 14 de febrero de 2017 23:43
    • Propuesto como respuesta Joyce_ACModerator miércoles, 15 de febrero de 2017 15:49
    • Marcado como respuesta Jefry Zelaya jueves, 16 de febrero de 2017 23:55
    martes, 14 de febrero de 2017 23:42
  • Hola,que hace el método detallePedido(), deberías recorrer el datagridview e invocar al procedure en cada iteración del for

            Using conn As New SqlConnection("cadena de conexion")
                conn.Open()
    
                For Each Row As DataGridViewRow In MetroGrid1.Rows
                    Using cmd As New SqlCommand("in_Detalle_Pedido", conn)
                        cmd.CommandType = CommandType.StoredProcedure
                        cmd.Parameters.Clear()
                        cmd.Parameters.AddWithValue("@ID_DET", Convert.ToInt32(DetPed))
                        cmd.Parameters.AddWithValue("@Producto", Convert.ToString(Row.Cells(2).Value))
                        cmd.Parameters.AddWithValue("@Cantidad", Convert.ToString(Row.Cells(1).Value))
                        cmd.Parameters.AddWithValue("@Precio", Convert.ToString(Row.Cells(4).Value))
                        cmd.Parameters.AddWithValue("@SubTotal", Convert.ToString(Row.Cells(6).Value))
                        cmd.ExecuteNonQuery()
    
                    End Using
                Next
            End Using

    Si la respuesta te fue útil vótala como tal,y si fue respuesta márcala. Solo dejo en el foro mis post si fueron útiles , de lo contrario y por mantener el orden los borro. Saludos. Lima-Perú.


    Gracias por Responder, el método detallePedido() es para verificar la numeracion del pedido o factura, no influye en nada mas que eso, intentare como tu dices a ver si me funciona
    • Marcado como respuesta Jefry Zelaya jueves, 16 de febrero de 2017 23:55
    martes, 14 de febrero de 2017 23:53

Todas las respuestas

  • Hola:

     "If j < i Then"
    Que pintan esas variables j,i

    ¿Como es el codigo del Sub insertupdate?

    En vez de usar MetroGrid1.Item(2, j).Value, deberias usar la variable Row con algo como esto
    Row.Cells("Producto").Value.ToString
    y asi con los demas valores

    Un saludo desde Bilbo
    Carlos

    martes, 14 de febrero de 2017 23:32
  • Hola,que hace el método detallePedido(), deberías recorrer el datagridview e invocar al procedure en cada iteración del for

            Using conn As New SqlConnection("cadena de conexion")
                conn.Open()
    
                For Each Row As DataGridViewRow In MetroGrid1.Rows
                    Using cmd As New SqlCommand("in_Detalle_Pedido", conn)
                        cmd.CommandType = CommandType.StoredProcedure
                        cmd.Parameters.Clear()
                        cmd.Parameters.AddWithValue("@ID_DET", Convert.ToInt32(DetPed))
                        cmd.Parameters.AddWithValue("@Producto", Convert.ToString(Row.Cells(2).Value))
                        cmd.Parameters.AddWithValue("@Cantidad", Convert.ToString(Row.Cells(1).Value))
                        cmd.Parameters.AddWithValue("@Precio", Convert.ToString(Row.Cells(4).Value))
                        cmd.Parameters.AddWithValue("@SubTotal", Convert.ToString(Row.Cells(6).Value))
                        cmd.ExecuteNonQuery()
    
                    End Using
                Next
            End Using

    Si la respuesta te fue útil vótala como tal,y si fue respuesta márcala. Solo dejo en el foro mis post si fueron útiles , de lo contrario y por mantener el orden los borro. Saludos. Lima-Perú.


    • Editado Augusto1982 martes, 14 de febrero de 2017 23:43
    • Propuesto como respuesta Joyce_ACModerator miércoles, 15 de febrero de 2017 15:49
    • Marcado como respuesta Jefry Zelaya jueves, 16 de febrero de 2017 23:55
    martes, 14 de febrero de 2017 23:42
  • Hola,que hace el método detallePedido(), deberías recorrer el datagridview e invocar al procedure en cada iteración del for

            Using conn As New SqlConnection("cadena de conexion")
                conn.Open()
    
                For Each Row As DataGridViewRow In MetroGrid1.Rows
                    Using cmd As New SqlCommand("in_Detalle_Pedido", conn)
                        cmd.CommandType = CommandType.StoredProcedure
                        cmd.Parameters.Clear()
                        cmd.Parameters.AddWithValue("@ID_DET", Convert.ToInt32(DetPed))
                        cmd.Parameters.AddWithValue("@Producto", Convert.ToString(Row.Cells(2).Value))
                        cmd.Parameters.AddWithValue("@Cantidad", Convert.ToString(Row.Cells(1).Value))
                        cmd.Parameters.AddWithValue("@Precio", Convert.ToString(Row.Cells(4).Value))
                        cmd.Parameters.AddWithValue("@SubTotal", Convert.ToString(Row.Cells(6).Value))
                        cmd.ExecuteNonQuery()
    
                    End Using
                Next
            End Using

    Si la respuesta te fue útil vótala como tal,y si fue respuesta márcala. Solo dejo en el foro mis post si fueron útiles , de lo contrario y por mantener el orden los borro. Saludos. Lima-Perú.


    Gracias por Responder, el método detallePedido() es para verificar la numeracion del pedido o factura, no influye en nada mas que eso, intentare como tu dices a ver si me funciona
    • Marcado como respuesta Jefry Zelaya jueves, 16 de febrero de 2017 23:55
    martes, 14 de febrero de 2017 23:53