none
Cargar datos de una tabla de access en un DataGridView

    Pregunta

  • Hola a todos, al realizar mi proyecto surgieron unas dudas, tengo una base de datos en access, la cual puedo agregarle registros desde VB con la función sql, me funciona muy bien, pero ahora el problema, es que quiero mostrarla en una datagridview, espero y me puedan ayudar se los agradecería mucho, saludos foro. el código que llevo hasta ahorita es este:

    Public Class Form1
        Public conex As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=base.accdb") 'Mi base de datos se llama base
        ' Por medio de este objeto voy a enviar todos los comandos de SQL a la tabla por medio de la conexión
        Public comm As New OleDb.OleDbCommand
        ' Declaro una variable para armar la instrucción SQL
        Dim sql As String

        ' Al cargar la aplicación, intenta conectarse a la base de datos

         

     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

      Try
                ' Trato de abrir la conexión
                conex.Open()
                ' Inicializo el objeto Command
                comm.Connection = conex
                comm.CommandType = CommandType.Text
            Catch ex As Exception
                If Err.Number = 5 Then
                    MsgBox("No se pudo encontrar el archivo de la base de datos", MsgBoxStyle.Exclamation, "base")
                    End
                Else
                    MsgBox(Err.Description, MsgBoxStyle.Exclamation, "base")
                End If
            End Try
        End Sub

    'Aquí en este apartado  utilizo una imagen como botón de guardar

    Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
            
            If ComboBox1.Text = "" Then
                ' Si no lo escribió, mando mensaje de error
                MsgBox("Debe incluir una respuesta")
                TextBox1.Select()
            Else
              
                ' Armo la instrucción INSERT en la variable SQL
                sql = "INSERT INTO Libros (Fecha,Turno,Realizo) VALUES ( " & TextBox1.Text & ",'" & ComboBox2.Text & "'," & TextBox1.Text & ")"
            
                ' Asigno la instrucción SQL que se va a ejecutar
                comm.CommandText = sql

                Try
                    comm.ExecuteNonQuery()
                Catch ex As Exception
                    MsgBox(Err.Description, MsgBoxStyle.Exclamation, "base")
                End Try
            End If

        End Sub

    lunes, 13 de marzo de 2017 2:11

Respuestas

  • Ya se me soluciono eso gracias, al iniciar mi programa me dice una ventana "El formato de la cadena de iniciación no se ajusta a la especificación que comienza en el indice 0"

    pienso que es un error en mi cadena de conexión y la cambie por este valor que en mi caso es conex mi cadena de conexión, pero me sigue marcando el error

    Public conex As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=base.accdb")

    'Aquí empieza el codigo

    Imports System.Data.OleDb

    Public Class Form1

        Public conex As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=base.accdb")
        ' Por medio de este objeto voy a enviar todos los comandos de SQL a la tabla por medio de la conexión
        Public comm As New OleDb.OleDbCommand
        ' Declaro una variable para armar la instrucción SQL
        Dim sql As String


        ' Al cargar la aplicación, intenta conectarse a la base de datos







        Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click


            If ComboBox1.Text = String.Empty Then
                MsgBox("Debe incluir una respuesta")
                Exit Sub  'Salimos
            End If
            Try
                Using con As New OleDbConnection("conex")

                    'Abrimos la conexión
                    con.Open()

                  
                    Dim sql = "INSERT INTO Libros (Fecha,Turno,Realizo,Muestra,sistema,analisis,pH,Dureza,asunto,Presion,[Presion principal],Temperatura,Hora,Observacion) VALUES ( @fecha," & ComboBox1.Text & ",'" & ComboBox2.Text & "'," & TextBox1.Text & "," & TextBox2.Text & "," & TextBox3.Text & ", " & TextBox4.Text & "," & TextBox5.Text & ", '" & ComboBox3.Text & "'," & TextBox6.Text & "," & TextBox7.Text & "," & TextBox8.Text & ", @hora,'" & TextBox11.Text & "')"
                    comm.Parameters.AddWithValue("@fecha", Convert.ToDateTime(TextBox9.Text))
                    comm.Parameters.AddWithValue("@hora", Convert.ToDateTime(TextBox10.Text))

                    Dim cmd As New OleDbCommand(sql, con)

                    'Mensaje para el usuario (Opcional)
                    MessageBox.Show("El Libro fue registrado correctamente.")

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


        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            Dim fecha As DateTime = DateTime.Now

            TextBox9.Text = fecha.ToString("ddMMyy")

            Me.TextBox9.Enabled = False
        End Sub


        'prueba

        Public Sub cargarLibros()


            Try
                Using con As New OleDbConnection("conex")

            
                    Dim query = "Select Fecha,Turno,Realizo,Muestra,sistema,analisis,pH,Dureza,asunto,Presion,[Presion principal],Temperatura,Hora,Observacion from Libros"

                    Dim adap As New OleDbDataAdapter(query, con)


                    Dim dt As New DataTable

                    'Cargamos el DataTable con el resultado de la consulta
                    adap.Fill(dt)

                    'Asignamos la tabla al DGV
                    DataGridView1.DataSource = dt

                End Using
            Catch ex As Exception
                'Si se produce algún error lo mostramos
                MessageBox.Show(ex.Message)
            End Try
        End Sub

        Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load

            'Llamamos al método
            Call cargarLibros()
        End Sub


    End Class


    martes, 14 de marzo de 2017 3:55

Todas las respuestas

  • Hola Dante Bentancourt,

    Recomendaría que encapsules en un método, así puede servirte para actualizar el DGV en posteriores casos, solo llamarías al método.

    Un ejemplo de cargar los datos al DataGridView sería :

    Public Sub cargarLibros()
        Try
            Using con As New OleDbConnection("MiCadenaConexion")
    
                Dim query = "Select Fecha, Turno, Realizo from Libros"
    
                Dim adap As New OleDbDataAdapter(query, con)
    
                Dim dt As New DataTable
    
                'Cargamos el DataTable con el resultado de la consulta
                adap.Fill(dt)
    
                'Asignamos la tabla al DGV
                DataGridView1.DataSource = dt
    
            End Using
        Catch ex As Exception
            'Si se produce algún error lo mostramos
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Y en el evento Load de tu formulario llamarías al método 'cargarLibros()'.

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
        'Llamamos al método
        Call cargarLibros()
    End Sub

    Con lo referente a tu código mostrado,deberías usar parametrización mediante la propiedad Parameters.

    Podrías hacer algo como :

    Private Sub PictureBox1_Click_(sender As Object, e As EventArgs) Handles PictureBox1.Click
        If ComboBox1.Text = String.Empty Then
            MsgBox("Debe incluir una respuesta")
            Exit Sub  'Salimos
        End If
    
        'El comboBox1 tiene un valor, seguimos...
        Try
            Using con As New OleDbConnection("MiCadenaConexion")
    
                'Abrimos la conexión
                con.Open()
    
                Dim sql = "INSERT INTO Libros (Fecha,Turno,Realizo) VALUES (?,?,?)"
    
                Dim cmd As New OleDbCommand(sql, con)
    
                'Agregamos los parámetros
                cmd.Parameters.AddWithValue("@fecha", TextBox1.Text)  'mismo valores envías
                cmd.Parameters.AddWithValue("@turno", ComboBox1.Text)
                cmd.Parameters.AddWithValue("@realizo", TextBox1.Text)  'mismo valores envías
    
                'Ejecutamos la consulta
                cmd.ExecuteNonQuery()
    
                'Mensaje para el usuario (Opcional)
                MessageBox.Show("El Libro fue registrado correctamente.")
    
            End Using
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    
    End Sub

    Por cierto, ¿Por qué el valor de que toma la columna 'Fecha' y 'Realizo' obtienen el valor de TextBox1.Text ? Si tu campo es de un tipo que no es cadena debes de convertirlo.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    lunes, 13 de marzo de 2017 3:02
  • Hola que tal Joel C. Naupa Crispín esta muy bien tu respuestas, pero me sale un error en OleDbConection espero me puedas ayudar a resolverlo, gracias

    Public Sub cargarLibros()
        Try
            Using con As New OleDbConnection("MiCadenaConexion")  'Aqui me sale el error en OleDdConnection
    
                Dim query = "Select Fecha, Turno, Realizo from Libros"
    
                Dim adap As New OleDbDataAdapter(query, con)
    
                Dim dt As New DataTable
    
                'Cargamos el DataTable con el resultado de la consulta
                adap.Fill(dt)
    
                'Asignamos la tabla al DGV
                DataGridView1.DataSource = dt
    
            End Using
        Catch ex As Exception
            'Si se produce algún error lo mostramos
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    martes, 14 de marzo de 2017 3:01
  • Hola Dante Bentancourt,

    ¿Qué error te muestra, podrías mostrarlo ?

    Ya que puede producirse por 'x' razones.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    martes, 14 de marzo de 2017 3:06
  • martes, 14 de marzo de 2017 3:12
  • Me sale ese error
    martes, 14 de marzo de 2017 3:12
  • Hola Dante Bentancourt,

    Tienes agregado el Import?

    Imports System.Data.OleDb

    Otra cosa, la parte de "MiCadenaConexion" tienes que cambiarla por tu verdadera cadena de conexión que usas para conectarte a la base de datos.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    martes, 14 de marzo de 2017 3:18
  • Ya se me soluciono eso gracias, al iniciar mi programa me dice una ventana "El formato de la cadena de iniciación no se ajusta a la especificación que comienza en el indice 0"

    pienso que es un error en mi cadena de conexión y la cambie por este valor que en mi caso es conex mi cadena de conexión, pero me sigue marcando el error

    Public conex As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=base.accdb")

    'Aquí empieza el codigo

    Imports System.Data.OleDb

    Public Class Form1

        Public conex As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=base.accdb")
        ' Por medio de este objeto voy a enviar todos los comandos de SQL a la tabla por medio de la conexión
        Public comm As New OleDb.OleDbCommand
        ' Declaro una variable para armar la instrucción SQL
        Dim sql As String


        ' Al cargar la aplicación, intenta conectarse a la base de datos







        Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click


            If ComboBox1.Text = String.Empty Then
                MsgBox("Debe incluir una respuesta")
                Exit Sub  'Salimos
            End If
            Try
                Using con As New OleDbConnection("conex")

                    'Abrimos la conexión
                    con.Open()

                  
                    Dim sql = "INSERT INTO Libros (Fecha,Turno,Realizo,Muestra,sistema,analisis,pH,Dureza,asunto,Presion,[Presion principal],Temperatura,Hora,Observacion) VALUES ( @fecha," & ComboBox1.Text & ",'" & ComboBox2.Text & "'," & TextBox1.Text & "," & TextBox2.Text & "," & TextBox3.Text & ", " & TextBox4.Text & "," & TextBox5.Text & ", '" & ComboBox3.Text & "'," & TextBox6.Text & "," & TextBox7.Text & "," & TextBox8.Text & ", @hora,'" & TextBox11.Text & "')"
                    comm.Parameters.AddWithValue("@fecha", Convert.ToDateTime(TextBox9.Text))
                    comm.Parameters.AddWithValue("@hora", Convert.ToDateTime(TextBox10.Text))

                    Dim cmd As New OleDbCommand(sql, con)

                    'Mensaje para el usuario (Opcional)
                    MessageBox.Show("El Libro fue registrado correctamente.")

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


        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            Dim fecha As DateTime = DateTime.Now

            TextBox9.Text = fecha.ToString("ddMMyy")

            Me.TextBox9.Enabled = False
        End Sub


        'prueba

        Public Sub cargarLibros()


            Try
                Using con As New OleDbConnection("conex")

            
                    Dim query = "Select Fecha,Turno,Realizo,Muestra,sistema,analisis,pH,Dureza,asunto,Presion,[Presion principal],Temperatura,Hora,Observacion from Libros"

                    Dim adap As New OleDbDataAdapter(query, con)


                    Dim dt As New DataTable

                    'Cargamos el DataTable con el resultado de la consulta
                    adap.Fill(dt)

                    'Asignamos la tabla al DGV
                    DataGridView1.DataSource = dt

                End Using
            Catch ex As Exception
                'Si se produce algún error lo mostramos
                MessageBox.Show(ex.Message)
            End Try
        End Sub

        Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load

            'Llamamos al método
            Call cargarLibros()
        End Sub


    End Class


    martes, 14 de marzo de 2017 3:55