none
Error en la Instrucción INSERT INTO con Access y VB.Net 2010

    Pregunta

  • Saludos!!

    Tengo un pequeño problema con uno de mis proyectos y quisiera que alguien me ayudara, se lo agradeceré bastante.

    Estoy trabajando con un Sistema de Telecomunicaciones y tengo problemas al insertar los datos

    Eh aquí mi codigo:

    Imports System.Data
    Imports System.Data.OleDb
    
    Public Class servicio_tv
    
        Private Function conexion() As OleDbConnection
            Try
                Dim ruta As String = "Provider=Microsoft.Jet.OleDb.4.0; Data Source=" & Application.StartupPath & "\Base de datos\sis-telecom.mdb"
                cnn.ConnectionString = ruta
                cnn.Open()
            Catch ex As Exception
                MsgBox(ex.Message, MsgBoxStyle.Critical, "Error de Conexión")
            End Try
    
            Return cnn
    
        End Function
    
        Private Function generarCodigo() As String
    
            Dim random As New Random
            Dim generado As String = String.Empty
    
            While generado.Length <= 5
                'Primera es LETRA donde  A = 65 y Z = 90
                If generado.Length = 0 Then
                    generado += Chr(random.Next(65, 90))
                End If
                generado += random.Next(0, 9).ToString()
            End While
    
            Return generado
    
        End Function
    
        Dim cnn As New OleDbConnection
        Dim fecha As Date
        Private Sub servicio_tv_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            Label9.Text = Date.Now
            Try
                conexion()
            Catch ex As Exception
                MsgBox(ex.Message, MsgBoxStyle.Critical, "Error de Conexión")
            End Try
        End Sub
        Private Sub btn_vender_Click(sender As System.Object, e As System.EventArgs) Handles btn_vender.Click
    
            If txt_nomclient.Text = "" Or txt_nomclient.Text = " " Then
                MsgBox("El campo 'Nombre del Cliente' es obligatorio llenarlo", MsgBoxStyle.Exclamation, "The Legend Com")
            ElseIf txt_cedula.Text = "" Or txt_cedula.Text = " " Then
                MsgBox("El campo 'Cédula' es obligatorio llenarlo", MsgBoxStyle.Exclamation, "The Legend Com")
            ElseIf txt_direccion.Text = "" Or txt_direccion.Text = " " Then
                MsgBox("El campo 'Dirección' es obligatorio llenarlo", MsgBoxStyle.Exclamation, "The Legend Com")
            ElseIf txt_tel.Text = "" Or txt_tel.Text = " " Then
                MsgBox("El campo 'Teléfono' es obligatorio llenarlo", MsgBoxStyle.Exclamation, "The Legend Com")
            ElseIf txt_vendedor.Text = "" Or txt_vendedor.Text = " " Then
                MsgBox("El campo 'Vendedor' es obligatorio llenarlo", MsgBoxStyle.Exclamation, "The Legend Com")
            ElseIf ComboBox_paq_tel.SelectedItem = -1 Then
                MsgBox("El campo 'Paquete TV' es obligatorio seleccionar uno", MsgBoxStyle.Exclamation, "The Legend Com")
            ElseIf txt_precioneto.Text = "" Or txt_precioneto.Text = " " Then
                MsgBox("El campo 'Precio Neto' es obligatorio llenarlo", MsgBoxStyle.Exclamation, "The Legend Com")
            ElseIf txt_itbis.Text = "" Or txt_itbis.Text = " " Then
                MsgBox("El campo 'ITBIS' es obligatorio llenarlo", MsgBoxStyle.Exclamation, "The Legend Com")
            ElseIf txt_subtotal.Text = "" Or txt_subtotal.Text = " " Then
                MsgBox("El campo 'Sub-Total' es obligatorio llenarlo", MsgBoxStyle.Exclamation, "The Legend Com")
            ElseIf txt_total.Text = "" Or txt_total.Text = " " Then
                MsgBox("El campo 'Total' es obligatorio llenarlo", MsgBoxStyle.Exclamation, "The Legend Com")
            End If
    
            txt_nofact.Text = generarCodigo() + Label9.Text
    
            Dim insert As String = ("INSERT INTO servicio-tv (Fecha,NomClient,Cedula,Telefono,Direccion,Vendedor,PackTV,PrecioNeto,ITBIS,SubTotal,Total) VALUES ('" & Label9.Text & "','" & txt_nomclient.Text & "','" _
            & txt_cedula.Text & "','" & txt_direccion.Text & "','" & txt_tel.Text & "','" & txt_vendedor.Text & "','" & ComboBox_paq_tel.Text & "','" & txt_precioneto.Text & "','" & _
             txt_itbis.Text & "','" & txt_subtotal.Text & "','" & txt_total.Text & "')")
    
            Dim cmd As New OleDbCommand
            cmd.Connection = cnn
            cmd.CommandType = CommandType.Text
            cmd.CommandText = insert
    
            Try
                cmd.ExecuteNonQuery()
            Catch ex As Exception
                MsgBox(ex.Message, MsgBoxStyle.Critical, "Error del Sistema")
            End Try
        End Sub
    End Class

    Les agradecería mucho su ayuda.
    Saludos desde Rep.Dom

    #TheLegend!


    LAPC


    domingo, 25 de septiembre de 2016 19:18

Respuestas

  • Luís Adolfo Pimentel,

    Como recomendación inicial, olvida crear una instancia de OleDbConnection a nivel de la clase 'servicio_tv', no es lo correcto, lo recomendable es que dispongas de una conexión en el ámbito estricto de uso. Por otro lado, cuando una consulta espera por parámetros lo recomendable es que los agregues a la colección Parameters y no concatenando valores a la consulta sql. Te dejo una estructura de código que deberías seguir, has los cambios respectivos y si sigues obteniendo algún error adjunta el mensaje que obtienes:

    Try
    	Using cn As New OleDbConnection("<Colocar cadena de conexión>")
    		Dim ConsultaSQL As String = "INSERT INTO T (Col1, Col2) VALUES (@Value1, @Value2)"
    		Dim cmd As New OleDbCommand(ConsultaSQL, cn)
    
    		cmd.Parameters.AddWithValue("@Value1", TextBox1.Text)
    		cmd.Parameters.AddWithValue("@Value2", TextBox2.Text)
    
    		cn.Open()
    
    		cmd.ExecuteNonQuery()
    	End Using
    Catch ex As Exception
    	MessageBox.Show(ex.Message)
    End Try

    Finalmente, cuida en realizar las conversiones respectivas en caso la tabla espere por un valor de tipo distinto a un tipo cadena, por ejemplo los formatos de fecha o números.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    domingo, 25 de septiembre de 2016 19:53