none
Problema para visualizar una tabla de Access en un Datagridview

    Pregunta

  •  

    Buenas tardes.

    Tengo una aplicación VB con un Datagridview donde cargo una tabla "Saldos" de una base de datos de Access. El problema es que no consigo visualizar los registros de la tabla en el Datagridview. 

    Este es el código que utilizo:

    Private Sub cargar_datagrid_saldos()
            Dim consulta20 As String
            consulta20 = "SELECT * FROM saldos WHERE CodUsuario= " & usuarios.id & " AND CodPlan= " & planes.id & " AND CodCuenta= " & variables.idcuenta & ""
            bbdd.adaptador = New OleDbDataAdapter(consulta20, bbdd.conexion)
            bbdd.registros.Tables.Add("saldos")
            bbdd.adaptador.Fill(bbdd.registros.Tables("saldos"))
            DataGridViewSaldos.DataSource = bbdd.registros.Tables("saldos")
        End Sub

    Las variables que utilizo de la clase "bbdd" las tengo declaradas así:

    Public Class bbdd
        Public Shared conexion As New OleDb.OleDbConnection
        Public Shared registros As New DataSet
        Public Shared adaptador As New OleDb.OleDbDataAdapter
    End Class

    No sé qué es lo que estoy haciendo mal.

    Gracias.

    lunes, 13 de marzo de 2017 17:40

Respuestas

  • Hola IvanBcn1982,

    Deberías crear una nueva instancia de las clases dentro del método y evitar declararlos como 'Shared', además sería recomendable parametrizar la consulta utilizando la propiedad Parameters.

    Private Sub cargar_datagrid_saldos()
        Try
            Using con As New OleDbConnection("MiCadenaConexion")
    
                Dim query = "SELECT * FROM saldos WHERE CodUsuario = ? AND CodPlan = ? AND CodCuenta = ?"
    
                Dim adap As New OleDbDataAdapter(query, con)
    
                'Agregamos los parámetros necesarios en el orden de la query
                adap.SelectCommand.Parameters.AddWithValue("@p1", usuarios.id)
                adap.SelectCommand.Parameters.AddWithValue("@p2", planes.id)
                adap.SelectCommand.Parameters.AddWithValue("@p3", variables.idcuenta)
    
                Dim dt As New DataTable
    
                'Cargamos el DataTable con el resultado de la consulta
                adap.Fill(dt)
    
                'Asignamos el resultado al DGV
                DataGridViewSaldos.DataSource = dt
    
            End Using
        Catch ex As Exception
            'Si se produce algún error los mostramos
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    lunes, 13 de marzo de 2017 17:57

Todas las respuestas

  • Hola IvanBcn1982,

    Deberías crear una nueva instancia de las clases dentro del método y evitar declararlos como 'Shared', además sería recomendable parametrizar la consulta utilizando la propiedad Parameters.

    Private Sub cargar_datagrid_saldos()
        Try
            Using con As New OleDbConnection("MiCadenaConexion")
    
                Dim query = "SELECT * FROM saldos WHERE CodUsuario = ? AND CodPlan = ? AND CodCuenta = ?"
    
                Dim adap As New OleDbDataAdapter(query, con)
    
                'Agregamos los parámetros necesarios en el orden de la query
                adap.SelectCommand.Parameters.AddWithValue("@p1", usuarios.id)
                adap.SelectCommand.Parameters.AddWithValue("@p2", planes.id)
                adap.SelectCommand.Parameters.AddWithValue("@p3", variables.idcuenta)
    
                Dim dt As New DataTable
    
                'Cargamos el DataTable con el resultado de la consulta
                adap.Fill(dt)
    
                'Asignamos el resultado al DGV
                DataGridViewSaldos.DataSource = dt
    
            End Using
        Catch ex As Exception
            'Si se produce algún error los mostramos
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    lunes, 13 de marzo de 2017 17:57
  • Hola:
    Prueba con algo como esto

    Private Sub cargar_datagrid_saldos()
            Try
                Using loConexion As New OleDbConnection("TU_CADENA_DE_CONEXION")
                    Dim consulta20 As String= "SELECT * FROM saldos WHERE CodUsuario= " & usuarios.id & " AND CodPlan= " & planes.id & " AND CodCuenta= " & variables.idcuenta & ""
                    Dim loDataTable As New DataTable
                    Dim loDataAdapter As New OleDbDataAdapter(consulta20, loConexion)
                    loDataAdapter.Fill(loDataTable)
                    'Para enlazar el datatable con el datagrid, en DataSource se asigna el datatable
                    DataGridViewSaldos.DataSource = loDataTable
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
    End Sub

    Un saludo desde Bilbo
    Carlos
    lunes, 13 de marzo de 2017 18:01