Principales respuestas
System.InvalidOperationException: 'ExecuteNonQuery: la propiedad Connection no se ha inicializado.'

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_
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 -
-
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
-