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.
[...] 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 [...]
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
gracias me sirvio de mucho!!! aunque quisiera saber como irlo filtrando por campo, hasta encontrar un registro determinado.
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..
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
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?
Hola Oscar:
No tiene muchos secretos… el control datagridview necesita que le indiques en la propiedad datasource cual es la tabla que contiene los datos o puede tener un databindingsource. Te recomiendo mirar estos dos artículos y estoy seguro que lo vas a poder lograr.
http://www.solovb.net/index.php/2009/02/05/conectarse-a-una-base-de-datos-de-sql-server-y-llenar-un-datagridview-sin-escribir-codigo/
http://www.solovb.net/index.php/2009/02/03/conectarse-con-base-sql-server-y-llenar-datagridview/
Suerte
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.
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)
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
Agradecido por el codigo…
Hay alguna forma de rescatar los datos contenidos en el gridview y ponerlos en un archivo PDF???.
Saludos desde Chile
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
me da el siguiente error
No se pudo encontrar el archivo ISAM instalable.
da.Fill(ds)
Hice todo tal cual ¿alguna idea?
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???
Gracias,Una explicacion muy sencilla y muy practica,Gracias
Excelente post, de mucha ayuda y muy detallado, simplemente no sabia que fuera tan facil.
Gracias
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?
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…
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
Grande Bestia !!!!!!!
Ya se me habian quemado hasta las pestañas
Soy usuario de vb6 y recien cambie a vb 2010
GRACIAS!!!!!
ME PARECE QUE ESTE NO ES CODIGO PARA VB 2010
PORFAVOT ALGUIEN SABE PARA PUEDA ENSEÑARLO
QUISIEA APRENDER CON URGENCIA !!!
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
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
Me fue de mucha ayuda, gracias!
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
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!