none
Ayuda {"ExecuteNonQuery: la propiedad Connection no se ha inicializado."}

    Pregunta

  • Hola compañeros xD bueno la verdad estoy realizando un proyecto escolar con código de barra y eso, pero para no ir tanto al grano ay partes del código que no lo entiendo, me base en el tutorial de genesis v sin embargo no me corre a la perfección les agradecería su pronta ayuda porfavor

    eh aqui el codigo

    Imports iTextSharp.text.pdf

    Public Class Form1
        Private Sub TabPage2_Click(sender As Object, e As EventArgs)
            Txtbus.Focus()
        End Sub
        Private Sub BtnGenerar_Click(sender As Object, e As EventArgs) Handles BtnGenerar.Click
            Dim bcode As New Barcode128
            bcode.BarHeight = 50
            bcode.Code = Codigotex.Text
            bcode.GenerateChecksum = True
            bcode.CodeType = Barcode.CODE128
            Try
                Dim bm As New Bitmap(bcode.CreateDrawingImage(Color.Black, Color.White))
                Dim img As Image
                img = New Bitmap(bm.Width, bm.Height)
                Dim g As Graphics = Graphics.FromImage(img)
                g.FillRectangle(New SolidBrush(Color.White), 0, 0, bm.Width,bm.Height)
                g.DrawImage(bm, 0, 0)
                PictureBox1.Image = img
            Catch ex As Exception
                MsgBox("No se pudo generar")
                PrintPreviewDialog1.Show()
            End Try
        End Sub

        Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
            Dim bm As New Bitmap(PictureBox1.Width, PictureBox1.Height)
            PictureBox1.DrawToBitmap(bm, New Rectangle(0, 0, bm.Width, bm.Height))
            e.Graphics.DrawImage(bm, 0, 0)
        End Sub

        Private Sub BtnGuardar_Click(sender As Object, e As EventArgs) Handles BtnGuardar.Click
            Dim con As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\codigodebarra.accdb;Persist Security Info=False;")
            con.Open()
            Dim cmd As New OleDb.OleDbCommand("INSERT INTO Poducto(Codigo,Nombre,Tipo,Precio,Numero_de_Inventario) VALUES(@cod,@nom,@tip,@pre,@noin")
            cmd.Parameters.Add("@cod", OleDb.OleDbType.VarChar).Value = Codigotex.Text
            cmd.Parameters.Add("@nom", OleDb.OleDbType.VarChar).Value = Nombre.Text
            cmd.Parameters.Add("@tip", OleDb.OleDbType.VarChar).Value = Tip.Text
            cmd.Parameters.Add("@pre", OleDb.OleDbType.VarChar).Value = prec.Text
            cmd.Parameters.Add("@cod", OleDb.OleDbType.VarChar).Value = Noin.Text
            If cmd.ExecuteNonQuery() > 0 Then  //error  {"ExecuteNonQuery: la propiedad Connection no se ha inicializado."}
                MsgBox("Producto guardado")
                PrintPreviewDialog1.Show()
            End If

        End Sub

        Private Sub Txtbus_TextChanged(sender As Object, e As EventArgs) Handles Txtbus.TextChanged
            Dim con As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\codigodebarra.accdb;Persist Security Info=False;")
            con.Open()
            Dim cmd As New OleDb.OleDbCommand("SELECT * FROM Producto WHERE Codigo=@cod", con)
            cmd.Parameters.Add("@cod", OleDb.OleDbType.VarChar).Value = Txtbus.Text
            Dim dr As OleDb.OleDbDataReader = cmd.ExecuteReader()
            If dr.Read() Then
                txtNom.Text = dr("Nombre").ToString()
                txtTip.Text = dr("Tipo").ToString()
                txtPre.Text = dr("Precio").ToString()
                txtNo.Text = dr("Numero_de_Inventario").ToString()
            End If
            dr.Close()
            con.Close()
        End Sub
    End Class


    domingo, 30 de octubre de 2016 21:26

Respuestas

  • Hola Ryu117,

    Cuando creas la nueva instancia de la clase OleDbCommand no le asignas la conexión, tendrías que hacer :

     Dim cmd As New OleDb.OleDbCommand("INSERT INTO .....", con)

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Ryu117 lunes, 31 de octubre de 2016 22:46
    domingo, 30 de octubre de 2016 21:38
  • Ahora el código es correcto desde el punto de vista de la conexión, tiene que estar fallando alguna otra cosa.

    Pon un punto de ruptura con el debugger justo en el ExecuteNonQuery, y cuando se detenga ahí la ejecución, examina con las herramientas del debugger los valores del command, a ver qué es lo que pone en su .Connection. Si a la vista no detectas cual es el problema, ponnos aquí una captura de pantalla en la que se vea el mensaje de error exacto y completo, así como cualquier otro dato relevante (por ejemplo que se vea el "Locals" con el command desplegado para que veamos los valores que contiene, a ver si nos dan una pista).

    • Marcado como respuesta Ryu117 lunes, 31 de octubre de 2016 22:42
    lunes, 31 de octubre de 2016 7:14

Todas las respuestas

  • Hola Ryu117,

    Cuando creas la nueva instancia de la clase OleDbCommand no le asignas la conexión, tendrías que hacer :

     Dim cmd As New OleDb.OleDbCommand("INSERT INTO .....", con)

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Ryu117 lunes, 31 de octubre de 2016 22:46
    domingo, 30 de octubre de 2016 21:38
  •         Dim cmd As New OleDb.OleDbCommand("INSERT INTO Poducto(Codigo,Nombre,Tipo,Precio,Numero_de_Inventario) VALUES(@cod,@nom,@tip,@pre,@noin")
    [...]

            If cmd.ExecuteNonQuery() > 0 Then  //error  {"ExecuteNonQuery: la propiedad Connection no se ha inicializado."}

    El mensaje de error tiene toda la razón: la propiedad Connection del cmd no se ha inicializado. Fíjate en que creas el cmd sin especificarle la conexión (no se la has pasado al final del constructor) y que tampoco le asignas en ningún sitio el .Connection. En consecuencia, ese cmd no sabe cómo mandar a ejecutar el ExecuteNonQuery, porque no tiene ninguna conexión para mandarlo (sí, has abierto una conexión más arriba, pero nunca se la has entregado al cmd).

    La solución más sencilla es añadir ,con al final del constructor del cmd:

    Dim cmd As New OleDb.OleDbCommand("INSERT INTO Poducto(Codigo,Nombre,Tipo,Precio,Numero_de_Inventario) VALUES(@cod,@nom,@tip,@pre,@noin)", con)

    Por cierto, fíjate que te faltaba un paréntesis para cerrar el VALUES, te lo he añadido.

    domingo, 30 de octubre de 2016 21:41
  • Hoola gracias por su pronta respuesta :) pero sigue sin funcionar agregue las partes del código

    Dim cmd As New OleDb.OleDbCommand("INSERT INTO Poducto(Codigo,Nombre,Tipo,Precio,Numero_de_Inventario) VALUES(@cod,@nom,@tip,@pre,@noin)", con)
            cmd.Parameters.Add("@cod", OleDb.OleDbType.VarChar).Value = Codigotex.Text
            cmd.Parameters.Add("@nom", OleDb.OleDbType.VarChar).Value = Nombre.Text
            cmd.Parameters.Add("@tip", OleDb.OleDbType.VarChar).Value = Tip.Text
            cmd.Parameters.Add("@pre", OleDb.OleDbType.VarChar).Value = prec.Text
            cmd.Parameters.Add("@cod", OleDb.OleDbType.VarChar).Value = Noin.Text
            If cmd.ExecuteNonQuery() > 0 Then
                MsgBox("Producto guardado")
                PrintPreviewDialog1.Show()
            End If 

    Aun marca el error :)

    esto es a la hora de correr el programa 


      
    domingo, 30 de octubre de 2016 22:14
  • Ahora el código es correcto desde el punto de vista de la conexión, tiene que estar fallando alguna otra cosa.

    Pon un punto de ruptura con el debugger justo en el ExecuteNonQuery, y cuando se detenga ahí la ejecución, examina con las herramientas del debugger los valores del command, a ver qué es lo que pone en su .Connection. Si a la vista no detectas cual es el problema, ponnos aquí una captura de pantalla en la que se vea el mensaje de error exacto y completo, así como cualquier otro dato relevante (por ejemplo que se vea el "Locals" con el command desplegado para que veamos los valores que contiene, a ver si nos dan una pista).

    • Marcado como respuesta Ryu117 lunes, 31 de octubre de 2016 22:42
    lunes, 31 de octubre de 2016 7:14
  • Muchas Gracias por tu ayuda, El debugger me mostró un campo que no estaba en mi tabla pero si en mi consulta lo agregue y funciono :) que alivio!!

    lunes, 31 de octubre de 2016 22:46