none
LLenar tabla sql

    Pregunta

  • Hola tengo que llenar una base me guarda los productos en un registro y en otro por separado los otros datos, tengo una clase llenada ClsVentas con la funcion Insertar

     Public Sub Insertar()
            Try
                Me.Conector.Insertar("INSERT INTO Ventas (Id_ventas, Productos, Total, Fecha, Cliente, Usuario) VALUES (" & Me.Id_ventas & ",  @Productos, '" & Me.Total & "', '" & Me.dtpFecha & "', '" & Me.Cliente & "', '" & Me.Usuario & "')")

            Catch Exc As Exception
                MsgBox("Ocurrió un error. La venta no se ha registrado.", MsgBoxStyle.OkOnly, "ERROR")
            End Try
        End Sub

    Este es el boton guardar que llama a la funcion insertar

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
            Dim productos As String = String.Empty
            For Each row As DataGridViewRow In DataGridView2.Rows
                productos += String.Concat(row.Cells("Column1").Value.ToString(), ",")
            Next
            Try
                Using cn As New SqlConnection("Data Source=MARTIN-PC;Initial Catalog=BASEDATOSCOMERCIO;Integrated Security=true")
                    cn.Open()
                    With Me.Ventas
                        Dim cmd As New SqlCommand("INSERT INTO Ventas (Productos) values (@Productos)", cn)

                        .Id_ventas = txtid.Text
                        'cmd.Parameters.AddWithValue("@productos", productos.EndsWith(","))
                        cmd.Parameters.AddWithValue("@Productos", productos.TrimEnd(","c))
                        .Total = txttotal.Text
                        .dtpFecha = DateTimePicker1.Value
                        .Usuario = Me.Usuarios.Nombre
                        .Insertar()
                        cmd.ExecuteNonQuery()
                    End With


                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try

    end sub

    Desde ya gracias, saludos.

    lunes, 3 de octubre de 2016 16:25

Respuestas

  • Martin12259,

    La verdad no entiendo lo que realizas, ¿por qué agregas dos filas en la tabla [Ventas]? ¿No basta con registrar una sola fila para la venta?, tampoco entiendo el porque concatenas los productos como un único ítem de venta y no sumas el total de cada fila.

    Te recomiendo revisar nuevamente el proyecto y hacer las correctivas necesarias. Con lo que presentas intentaré aclarar el panorama. 

    Entiendo que implementas una clase Ventas:

    Public Class Ventas
    	Property Id_ventas As Integer
    	Property Producto As String
    	Property Total As Decimal
    	Property dtpFecha As DateTime
    	Property Cliente As String
    	Property Usuario As String
    End Class


    Y un procedimiento Function que permite insertar la operación según los valores ingresados en una instancia de la clase Ventas, por tanto el procedimiento deberá recibir como parámetro una instancia de la clase:

    Public Sub Insertar(v As Ventas)
    	Try
    		Using cn As New SqlConnection("Colocar cadena de conexión")
    			Dim ConsultaSQL As String =
    				"INSERT INTO Ventas (Id_ventas, Productos, Total, Fecha, Cliente, Usuario) " _
    				& "VALUES (@Id_ventas, @Productos, @Total, @Fecha, @Cliente, @Usuario)"
    			Dim cmd As New SqlCommand(ConsultaSQL, cn)
    
    			cmd.Parameters.AddWithValue("@Id_ventas", v.Id_ventas)
    			cmd.Parameters.AddWithValue("@Productos", v.Producto)
    			cmd.Parameters.AddWithValue("@Total", v.Total)
    			cmd.Parameters.AddWithValue("@Fecha", v.dtpFecha)
    			cmd.Parameters.AddWithValue("@Cliente", v.Cliente)
    			cmd.Parameters.AddWithValue("@Usuario", v.Usuario)
    
    			cn.Open()
    
    			cmd.ExecuteNonQuery()
    		End Using
    	Catch ex As Exception
    		MessageBox.Show(ex.Message)
    	End Try
    End Sub
    

    E invocas al procedimiento de la siguiente manera:

    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button.Click
    
    	Dim productos As String = String.Empty
    	For Each row As DataGridViewRow In DataGridView2.Rows
    		productos += String.Concat(row.Cells("Column1").Value.ToString(), ",")
    	Next
    
    	Dim venta As New Ventas With {
    		.Id_ventas = Convert.ToInt32(txtid.Text),
    		.Producto = productos.TrimEnd(","c),
    		.Total = Convert.ToDecimal(txttotal.Text),
    		.dtpFecha = DateTimePicker1.Value,
    		.Cliente = "NombreCliente",
    		.Usuario = "NombreUsuario"
    	}
    
    	Insertar(venta)
    End Sub


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Federico32113 lunes, 3 de octubre de 2016 19:57
    lunes, 3 de octubre de 2016 18:43