none
System.InvalidOperationException: 'ExecuteNonQuery: la propiedad Connection no se ha inicializado.' RRS feed

  • Pregunta

  • Hola compañeros.

    Estoy atascado con este error que me lanza (System.InvalidOperationException: 'ExecuteNonQuery: la propiedad Connection no se ha inicializado.').

    Podeis ayudarme?

    Este es el codigo en cuestión.

    Imports System.Data.OleDb
    
    Public Class Form5
    
        Public con As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\cifsejea\mantenimiento$\3_GENERAL\REPORT DIARIO MTO\Registrosprueba.accdb")
        'Public con As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Miguel\Desktop\Registros.accdb")
    
        Public conm As New OleDb.OleDbCommand
    
        Private Sub Registro_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            'TODO: esta línea de código carga datos en la tabla 'RegistrosDataSet.REGISTROS' Puede moverla o quitarla según sea necesario.
            Me.REGISTROSTableAdapter.Fill(Me.RegistrosDataSet.REGISTROS)
            Try
                If con.State <> ConnectionState.Open Then
    
                    con.Open()
    
                End If
    
                conm.Connection = con
                conm.CommandType = CommandType.Text
    
    
                'con.Close()
    
    
            Catch ex As Exception
                If Err.Number = 5 Then
                    MsgBox("No se pudo conectar con la base de datos")
                    End
                Else
                    MsgBox(Err.Description)
                End If
    
            End Try
    
            Mostraregistros()
    
        End Sub
    
        Private Sub Mostraregistros()
            Dim adaptador1 As New OleDbDataAdapter
            Dim registros1 As New DataSet
            Dim consulta1 As String
            consulta1 = "SELECT Id, FECHA, TECNICO, MATERIAL, COMENTARIOS FROM MATVARIOS"
            adaptador1 = New OleDbDataAdapter(consulta1, con)
            registros1.Tables.Add("MATVARIOS")
            adaptador1.Fill(registros1.Tables("MATVARIOS"))
            DGV4.DataSource = registros1.Tables("MATVARIOS")
            DGV4.Sort(DGV4.Columns(0), System.ComponentModel.ListSortDirection.Descending)
            DGV4.Columns(1).Width = 100
    
            DGV4.Columns(0).Visible = False
            DGV4.Columns(2).Width = 100
            DGV4.Columns(3).Width = 200
            DGV4.Columns(4).Width = 500
    
    
            DGV4.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells
            DGV4.ScrollBars = ScrollBars.Both
            DGV4.ForeColor = Color.Black
            DGV4.AlternatingRowsDefaultCellStyle.BackColor = Color.LightCyan
            DGV4.DefaultCellStyle.WrapMode = DataGridViewTriState.True
    
        End Sub
    
    
        Private Sub grabartabla()
            Dim sql1 As String
            sql1 = "INSERT INTO MATVARIOS (FECHA, TECNICO, MATERIAL, COMENTARIOS) VALUES ('" & DateTimePicker1.Text & "','" & cmbTecnic.Text & "', '" & txtMatSol.Text & "', '" & txtComent.Text & "')"
    
            conm.CommandText = sql1
    
            Try
                conm.ExecuteNonQuery()
    
                MsgBox("Enviado correctamente", vbInformation, "Registro grabado")
    
    
    
            Catch ex As Exception
                MsgBox(Err.Description, MsgBoxStyle.Exclamation, "Registro")
            End Try
    
        End Sub
    
        Private Sub btnVolver_Click(sender As Object, e As EventArgs) Handles btnVolver.Click
            Form2.Show()
            Me.Hide()
        End Sub
    
        Private Sub btnGrabar_Click(sender As Object, e As EventArgs) Handles btnGrabar.Click
    
            If String.IsNullOrEmpty(cmbTecnic.Text) Then
                MsgBox("Datos duplicados", vbInformation)
    
            Else
    
                grabartabla()
                Mostraregistros()
                cmbTecnic.Text = ""
                txtComent.Text = ""
                txtMatSol.Text = ""
    
            End If
    
        End Sub
    
        Private Sub btnBorrar_Click(sender As Object, e As EventArgs) Handles btnBorrar.Click
            Using conm = New OleDbCommand("delete from MATVARIOS where Id = & txtId.text, con")
    
                If con.State <> ConnectionState.Open Then
    
                    con.Open()
    
                End If
                conm.ExecuteNonQuery()
    
            End Using
            Mostraregistros()
    
        End Sub
    
    End Class

    Os agradezco de antemano vuestra ayuda.


    _MSA_

    viernes, 24 de agosto de 2018 11:43

Respuestas

Todas las respuestas

  • Yo utilizo este código para llenar un DataGridView con datos procedentes de Access. Espero que te sirva.

        Private Sub BtnCargar_Click(sender As Object, e As EventArgs) Handles BtnCargar.Click
            Try
                Dim CadenaDeConexion As String =
                "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Prueba.mdb"
                Using cnn As New OleDbConnection(CadenaDeConexion)
                    cnn.Open()
                    Dim cmd As OleDbCommand = cnn.CreateCommand()
                    cmd.CommandText = "Select * From direcciones"
                    Dim DA As New OleDbDataAdapter(cmd)
                    Dim DT As New DataTable
                    DA.Fill(DT)
                    Me.DataGridView1.DataSource = DT
                End Using
            Catch ex As Exception
                ' Se ha producido un error
                MessageBox.Show(ex.Message)
            End Try
        End Sub

    Saludos

    viernes, 24 de agosto de 2018 12:16
  • El problema lo tengo al intentar borrar registros.

    _MSA_

    • Marcado como respuesta _MSA_ sábado, 25 de agosto de 2018 17:16
    viernes, 24 de agosto de 2018 13:54
  • Hola:

    Te falta en Borrar el & de cierre y las comillas:

    Using conm = New OleDbCommand("delete from MATVARIOS where Id = & txtId.text , con")
    Sería:

    Using conm = New OleDbCommand("delete from MATVARIOS where Id = '" & txtId.text & "' , con")

    De todas formas se puede mejorar bastantes las consultas hechas. Usando correctament eel using y parámetros.

    Te será mas fácil localizar los problemas.

    Un saludo.

    Gemma

    viernes, 24 de agosto de 2018 14:18
  • Si cabe mucha mejora si.

    Gracias por la ayuda.


    _MSA_

    sábado, 25 de agosto de 2018 17:16