Conectarse con base de Microsoft Access y Llenar DataGridView

Como en el post anterior, de forma muy sensilla y con muy poco código, vamos a ver como establecer una conexión en visual basic .net con un archivo de base de datos de Microsoft Access y luego de recuperar los datos de una de las tablas para llenar con ellos un DataGridView.

Lo primero que hay que hacer es importar dos espacios de nombres como muestro a continuación:

 
Imports System.Data
Imports System.Data.OleDb

Para este ejemplo utilizaremos un formulario con un Botón (Button1) y un DataGridView (DataGridView1). En el evento click de button1 uno copiamos el siguiente codigo y el nombre de la base de datos .mdb y el nombre de la tabla en la instrucción SELECT) para que todo funcione bien.

 
Dim cnn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\myBaseAccess.mdb; User Id=admin;Password=;")

Dim da As New OleDbDataAdapter("SELECT * FROM Products", cnn)
Dim ds As New DataSet

da.Fill(ds)

DataGridView1.DataSource = ds.Tables(0)

Bueno, en realidad no hay mucho que explicar… se crea una conexión (cnn), luego un DataAdapter (da) que tiene como parámetro la instrucción para recuperar los datos (SELECT) y la conexión que debe utilizar (cnn). Si quieres seleccionar solo algunos registros deberás agregar una condición WHERE a la instrucción de selección.

En las lineas que siguen les dejo algunas breves definiciones por si a alguno le hicieran falta y para saber más de las distintas opciones para crear una conexión con Microsoft Access les dejo también el siguiente link: http://www.connectionstrings.com/access

DataAdapter

Representa un conjunto de comandos SQL y una conexión de base de datos que se utilizan para rellenar el objeto DataSet y actualizar el origen de datos.
DataAdapter actúa como puente entre DataSet y un origen de datos para la recuperación y el almacenamiento de datos. Para poder actuar como un puente, DataAdapter asigna el método Fill, que modifica los datos de DataSet de forma que coincidan con los del origen de datos, y asigna el método Update, que modifica los datos del origen de datos para hacerlos coincidir con los de DataSet.

DataSet

Representa una caché de memoria interna de datos. Es un componente fundamental de la arquitectura de ADO.NET. DataSet está compuesto por una colección de objetos DataTable.

DataTable

Representa una tabla de datos en memoria.
DataTable es un objeto central de la biblioteca ADO.NET. Entre los objetos que utilizan DataTable se incluyen DataSet y DataView.

Al obtener acceso a los objetos DataTable, hay que tener en cuenta que éstos distinguen entre mayúsculas y minúsculas condicionalmente. Por ejemplo, si un objeto DataTable se denomina “mydatatable” y otro “Mydatatable”, la cadena que se utilice para buscar una de las tablas se considerará que distingue entre mayúsculas y minúsculas. Sin embargo, si existe “mydatatable” pero no existe “Mydatatable”, se considerará que la cadena de búsqueda no distingue entre mayúsculas y minúsculas. Un objeto DataSet puede contener dos objetos DataTable que tengan el mismo valor para la propiedad TableName y distintos valores para la propiedad Namespace.



30 Responses to “Conectarse con base de Microsoft Access y Llenar DataGridView”

  1. [...] de escribir el ejemplo de conexión a SQL Server y el de conexión a Microsoft Access me di cuenta de que a pesar de que estos son los dos tipos de bases de datos mas usados cuando [...]

  2. carla uruguay dice:

    gracias la verdad fue de mucha ayuda. porque necesitaba un código lo mas sencillo posible por que tenia problemas para cargar una tabla de access a un datagrid y de todos los codigos que probé este fue el unico que me trajo toda la tabla y con tan poco codigo
    Gracias de verdad y bendiciones
    Carla

  3. EDWIN dice:

    gracias me sirvio de mucho!!! aunque quisiera saber como irlo filtrando por campo, hasta encontrar un registro determinado.

  4. Oswaldo dice:

    Saludos.. muy bueno tu articulo y tu pagina… te iba a preguntar como limpiar el DataGridView1 cada vez que le de clic a un boton para consultar y ver los datos, pero creo que lo solucione, no se si es lo correcto, pero al menos me funciono. Lo unico que hice fue agregar “ds.Clear()”
    Asi:
    ds.Clear()
    da.Fill(ds)
    DataGridView1.DataSource = ds.Tables(0)

    Ahora como hago para que en un TextBox donde escribiendo un nombre se valla mostrando solo los resultados encontrados en el DataGrid..

    • Eliseo dice:

      1.- para limpiarlo: está bien lo que haces, también podrías hacer DataGridView1.DataSource = Nothing
      2.- Para mostrar solo los datos que coinciden con el textBox el procedimiento es el mismo, lo único que cambia es la instrucción SELECT que realiza la búsqueda. Por ejemplo: “select * from empleados WHERE Nombre LIKE ‘%” & textBox1.Text & “%’”

      Suerte

  5. Oscar dice:

    Yo he trabajado con Visual Studio 6 y estoy tratando de trabajar con Visual Studio 2008. He hecho lo que dice el manual para mostrar datos de una tabla en un DataGridView, sin éxito. Se muestra el dataGridView, pero no los datos. En el evento load del formulario se colocan automáticamente unas líneas de código para llenar los datos, pero al parecer, eso no funciona. Alguien sabe si esto es un problema conocido?

  6. Maxi dice:

    La verdad que esto me funciona a la perfección pero lo que me no me funciona es el insert update y delete… incluso probe con conexionstring y sqlcomand.. ya no se que hacer..
    Alguna idea?
    Muchas gracias.

    • Maxi dice:

      Chicos me respondo yo.
      insert:
      Dim daagregar As New OleDbDataAdapter(“insert into pedidos (IDPLATO, Cantidad, IDMesa, IDCliente, Fecha) values (‘” & TxtCodigo.Text & “‘,’” & TxtCantidad.Text & “‘,’” & TxtMesa.Text & “‘,’0′,’8′)”, cnx)
      daagregar.Fill(dsPedidos)

  7. Jorge dice:

    hol que tal me gustaria saber como le hago para insertar datos en un datagridview pero que si ya existe el valor mande un mensaje que ya existe gracias SALUDOS

  8. Gabriel dice:

    Agradecido por el codigo…

    Hay alguna forma de rescatar los datos contenidos en el gridview y ponerlos en un archivo PDF???.

    Saludos desde Chile

  9. tttony dice:

    Hola, me conecto con una BD Access 2007 desde C#.NET aqui todo bien, pero tengo una tabla que tiene tres campo con fechas y les quiero dar un formato de salida y tengo dos opciones:

    1) Despues de rellenar el DataGridView darle formato a cada campo que contenga fecha

    2) Hacerlo con una sentencia SELECT:

    SELECT TOP 20 *,Format([buy_date],’Long Date’) & ‘ ‘ & Format([buy_date],’Short Time’) AS [buy_date] FROM testing ORDER BY Id DESC

    El problema de esa consulta es que coloca el campo [buy_date] de la posicion 4 a la 2 y tengo que escribir mas codigo para ordenarlo y eso es lo que no quiero hacer

    Saludos

  10. eliseo dice:

    me da el siguiente error
    No se pudo encontrar el archivo ISAM instalable.
    da.Fill(ds)
    Hice todo tal cual ¿alguna idea?

  11. Pablo_la31 dice:

    Hola!! mira yo me conecto con un BD access 2003 en vb.net de ahi traigo todos los datos de 3 tablas en un datatable con todas las columnas de las 3 tablas, ahora lo q quiero yo es mostrarlas en una dataGridView pero no a todas las columnas, sino a algunas.. como puedo hacerlo???

  12. Jordi dice:

    Gracias,Una explicacion muy sencilla y muy practica,Gracias

  13. Daniel dice:

    Excelente post, de mucha ayuda y muy detallado, simplemente no sabia que fuera tan facil.

    Gracias

  14. Misael dice:

    hola!!! genial la forma y muy secilla
    Una pregunta una vez que llene el DataGridView1 con el DataSet ¿como podria obtener algun valor de una celda en específico, es decir si kisiera el valor que tiene el DataGridView1 en a columna 1 de la fila 1?

  15. Claudio dice:

    Hola;
    Utilizo Microsofty Visual Basic 2008 y acces como base de datos..al escribir el mismo codigo que está expuesto en esta página me aparece un error en la linea que dice: da.Fill(ds)

    el error es: No se controló System.Data.OleDb.OleDbException
    ErrorCode=-2147467259
    Message=”No es un nombre de archivo válido.”

    Podrian ayudarme?
    Gracias…

  16. tato25 dice:

    hola a todos necesito ayuda para realizar el alta de un registro hasta la conexion y enlace de datos voy bien pero despues para realizar el alta no me sale este es el codigo
    coneccion:
    Private Sub Formclientes_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim coneccion As OleDbConnection
    coneccion = New OleDbConnection(“provider=microsoft.jet.oledb.4.0;data source=C:\proyectovb.net\tesis.mdb”)
    Dim dsclientes As DataSet
    Dim consultaclientes As String
    consultaclientes = “select clientes.dni, clientes.apellido from clientes”
    Dim daclientes As New OleDbDataAdapter(consultaclientes, coneccion)
    dsclientes = New DataSet()
    daclientes.Fill(dsclientes, “clientes”)
    Dgvclientes.DataSource = dsclientes.Tables(“clientes”)

    boton agregar:
    Dim TABLACLIENTES As DataTable = New DataTable(“clientes”)
    Dim REGISTROCLIENTES As DataRow = TABLACLIENTES.NewRow
    REGISTROCLIENTES(“dni”) = Me.TextBox1.Text
    REGISTROCLIENTES(“APELLIDO”) = Me.TextBox2.Text
    TABLACLIENTES.Rows.Add(REGISTROCLIENTES)
    que utilizo para el alta como hago para realizar un alta nueva pero primero verificar si el registro ya existe
    espero alguna respuesta de algun solidario gracias

  17. Borro dice:

    Grande Bestia !!!!!!!
    Ya se me habian quemado hasta las pestañas

    Soy usuario de vb6 y recien cambie a vb 2010

    GRACIAS!!!!!

  18. Jeysson dice:

    ME PARECE QUE ESTE NO ES CODIGO PARA VB 2010
    PORFAVOT ALGUIEN SABE PARA PUEDA ENSEÑARLO
    QUISIEA APRENDER CON URGENCIA !!!

  19. Gav RodHe dice:

    Excelente aportación. Felicidades me sirvió muchisimo. Estoy iniciandome en el mundo del VB.NET. Aunque tengo suficiente programación, pero siempre hace falta ejemplos asi cuando cambias de lenguaje de programación. Saludos

  20. Juan dice:

    No vi nada abierto de esto, pero quiero con formulario agregar datos en un base de datos en access y no puedo, si alguien podria ayudar agradeceria

    saludos

  21. Amaliam dice:

    Me fue de mucha ayuda, gracias!

  22. Chilon dice:

    Komo andas kapo, mira tengo una pregunta, estoy programando con el VB .net 2008 hace bastante no lo uso, y bueno estaba retomando. te comento.

    Hice un modulo en donde defini mi sentensia de coneccionn, y el data adapter y el data set, Hice la coneccion en el from pero me salta un error n mi Coneccion.open, mira como lo hice y decime si me podes ayudar..

    MODULO

    Imports System.Data
    Imports System.Data.OleDb
    Module Module1
    Public ConecZion As New OleDbConnection(“Provider=Microsoft.jet.OLEDB.4.0;DataSource=C:\Documents and Settings\USUARIO\Mis documentos\Pr Testear.mdb”)
    Public DataAdap As New OleDbDataAdapter(“select * from [Club XXXX] order by NrodeSocio”, ConecZion)
    Public Dataset As New DataSet
    End Module

    [B]Y ACA EL FROM [/B]

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

    Dataset.Clear()
    DataAdap.Fill(Dataset, “miTestearDt”)
    Dataset.Tables(“miTestearDt”).DefaultView.Sort = “NrodeSocio ASC”

    ConecZion.Close()
    End Sub

    Y ME TIRA ESTE ERROR

    No se pudo encontrar el archivo ISAM instalable.

    porq puede ser ?? :S..

    espero respuesta abrazo

  23. Marco dice:

    Gracias por la ayuda el problema que comentaron se arregla creando una instancia del DataSet que fue declarado al inicio por ejemplo mi variable se llama registro entonces seria: Dim registro = New DataSet() y listo!

  24. Herson dice:

    HAY QUE ACTUALIZARSE CANIJOS, YA LO DIJO DARWIN, ESPECIE QUE NO EVOLUCIONA, MUERE!!
    ACCESS 2007-2010: connectionString = @”Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\HSERNAL\Documents\escuela.accdb;Persist Segurity Info=False”;

  25. Ferdinando dice:

    Amigos necesito ayuda urgente, tengo una tabla en access y con este maravilloso codigo paso los datos a mi dgv… pero mi pregunta esta en como puedo hacer para solamente llenar la dgv con las 2 primeras columnas de mi tabla que tiene 6 columnas… de antemano agradezco la ayuda a cualquier buen amigo y genio groso que este por ahi….

  26. Leticia dice:

    Hola, muchas gracias me sirvio, pero tengo un problemita, tnego un campo de tipo objeto OLE y me gustaria poder visualizar esta imagen en un pictureBox al reccorrer los registros en el DATAGRIDVIEW, sera posible hacerlo y como lo haria, ojala me ayuden gracias.

  27. Wiz dice:

    Muchas gracias por todo! Intenté mil métodos y éste funcionó perfectamente.

    Mil gracias!

Comentar