Connectar amb base de Microsoft Access i Omplir DataGridView

Com en el post anterior , de forma molt sensilla i amb molt poc codi, anem a veure com establir una connexió en visual basic. net amb un arxiu de base de dades de Microsoft Access i després de recuperar les dades d'una de les taules per omplir amb ells un DataGridView.

El primer que cal fer és importar dos espais de noms com mostro a continuació:

 Imports System.Data
 Imports System.Data.OleDb

Per a aquest exemple utilitzarem un formulari amb un Botó (Button1) i un DataGridView (DataGridView1). En l'esdeveniment clic de Button1 1 copiem el següent codi i el nom de la base de dades. Mdb i el nom de la taula en la instrucció SELECT ) perquè tot funcioni bé.

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

 Dim dóna As New OleDbDataAdapter ("SELECT * FROM Products", cnn)
 Dim ds As New DataSet

 da.Fill (ds)

 DataGridView1.DataSource = ds.Tables (0)

Bé, en realitat no hi ha molt d'explicar ... es crea una connexió (cnn), després un DataAdapter (dóna) que té com a paràmetre la instrucció per recuperar les dades ( SELECT ) i la connexió que ha d'utilitzar (cnn). Si vols seleccionar només alguns registres hauràs afegir una condició WHERE a la instrucció de selecció.

En les línies que segueixen els deixo algunes breus definicions per si a algun li fessin falta i per saber més de les diferents opcions per crear una connexió amb Microsoft Access els deixo també el següent link: http://www.connectionstrings.com/access

DataAdapter

Representa un conjunt de comandes SQL i una connexió de base de dades que s'utilitzen per omplir l'objecte DataSet i actualitzar l'origen de dades.
DataAdapter fa de pont entre DataSet i un origen de dades per a la recuperació i l'emmagatzematge de dades. Per poder actuar com un pont, DataAdapter assigna el mètode Fill, que modifica les dades de DataSet de manera que coincideixin amb els de l'origen de dades, i assigna el mètode Update, que modifica les dades de l'origen de dades per a fer coincidir els de DataSet.

DataSet

Representa una memòria cau de memòria interna de dades. És un component fonamental de l'arquitectura de ADO.NET. DataSet està compost per una col · lecció d'objectes DataTable.

DataTable

Representa una taula de dades en memòria.
DataTable és un objecte central de la biblioteca ADO.NET. Entre els objectes que utilitzen DataTable s'inclouen DataSet i DataView.

En obtenir accés als objectes DataTable, cal tenir en compte que aquests distingeixen entre majúscules i minúscules condicionalment. Per exemple, si un objecte DataTable es denomina "mydatatable" i un altre "Mydatatable", la cadena que s'utilitzi per buscar una de les taules es considerarà que distingeix entre majúscules i minúscules. No obstant això, si hi ha "mydatatable" però no existeix "Mydatatable", es considera que la cadena de cerca no distingeix entre majúscules i minúscules. Un objecte DataSet pot contenir dos objectes DataTable que tinguin el mateix valor per la propietat TableName i diferents valors per a la propietat Namespace.

26 Responses to "Connectar amb base de Microsoft Access i Omplir DataGridView"

  1. [...] D'escriure l'exemple de connexió a SQL Server i el de connexió a Microsoft Access em vaig adonar que tot i que aquests són els dos tipus de bases de dades més usats quan [...]

  2. carla uruguay diu:

    gràcies la veritat va ser de molta ajuda. perquè necessitava un codi el més senzill possible per que tenia problemes per carregar una taula de access a un DataGrid i de tots els codis que vaig provar aquest va ser l'únic que em va portar tota la taula i amb tan poc codi
    Gràcies de veritat i benediccions
    Carla

  3. EDWIN diu:

    gràcies em va servir de molt! encara que volgués saber com anar-ho filtrant per camp, fins a trobar un registre determinat.

  4. Oswaldo diu:

    Salutacions .. molt bo el teu article i el teu pagina ... t'anava a preguntar com netejar el DataGridView1 cada vegada que li doni clic a un botó per consultar i veure les dades, però crec que ho solucioni, no se si és el correcte, però almenys em va funcionar . El únic que vaig fer va ser afegir "ds.Clear ()"
    Així:
    ds.Clear ()
    da.Fill (ds)
    DataGridView1.DataSource = ds.Tables (0)

    Ara com faig perquè en un TextBox on escrivint un nom es tanca mostrant només els resultats trobats al DataGrid ..

    • Eliseu diu:

      1. - Per netejar: està bé el que fas, també podries fer DataGridView1.DataSource = Nothing
      2. - Per mostrar només les dades que coincideixen amb el TextBox el procediment és el mateix, l'únic que canvia és la instrucció SELECT que realitza la recerca. Per exemple: "select * from empleats WHERE Nom LIKE '%" & textBox1.Text & "%'"

      Sort

  5. Oscar diu:

    Jo he treballat amb Visual Studio 6 i estic tractant de treballar amb Visual Studio 2008. He fet el que diu el manual per mostrar dades d'una taula en un DataGridView, sense èxit. Es mostra el dataGridView, però no les dades. En l'esdeveniment load del formulari es col · loquen automàticament unes línies de codi per omplir les dades, però pel que sembla, això no funciona. Algú sap si això és un problema conegut?

  6. Maxi diu:

    La veritat que això em funciona a la perfecció però el que em no em funciona és el insert update i delete ... fins i tot probe amb conexionstring i sqlcomand .. ja no sé què fer ..
    Alguna idea?
    Moltes gràcies.

    • Maxi diu:

      Nois em responc jo.
      insert:
      Dim daagregar As New OleDbDataAdapter ("insert into comandes (IDPLATO, Quantitat, IDMesa, IDCliente, Data) values ​​('" & TxtCodigo.Text & "', '" & TxtCantidad.Text & "', '" & TxtMesa.Text & "', '0', '8 ')", CNX)
      daagregar.Fill (dsPedidos)

  7. Jorge diu:

    hol que tal m'agradaria saber com li faig per inserir dades en un datagridview però que si ja existeix el valor mani un missatge que ja existeix gràcies SALUTACIONS

  8. Gabriel diu:

    Agraït pel codi ...

    Hi ha alguna manera de rescatar les dades contingudes en el GridView i posar-los en un arxiu PDF???.

    Salutacions des de Xile

  9. tttony diu:

    Hola, em connecto amb una BD Access 2007 des de C #. NET aqui tot bé, però tinc una taula que té tres camp amb dates i els vull donar un format de sortida i tinc dues opcions:

    1) Després d'omplir el DataGridView donar-li format a cada camp que contingui data

    2) Fer-ho amb una sentència 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 d'aquesta consulta és que col · loca el camp [buy_date] de la posició 4 a la 2 i he d'escriure més codi per ordenar i això és el que no vull fer

    Salutacions

  10. Eliseo diu:

    em dóna el següent error
    No s'ha trobat el fitxer ISAM instal · lable.
    da.Fill (ds)
    Vaig fer tot tal qual ¿alguna idea?

  11. Pablo_la31 diu:

    Hola!! mira jo em connecto amb un BD access 2003 a vb.net d'aquí porto totes les dades de 3 taules en un datatable amb totes les columnes de les 3 taules, ara el q vull jo és mostrar-les en una dataGridView però no a totes les columnes , sinó a algunes .. com puc fer-ho???

  12. Jordi diu:

    Gràcies, Una explicació molt senzilla i molt pràctica, Gràcies

  13. Daniel diu:

    Excel · lent post, de molta ajuda i molt detallat, simplement no sabia que fos tan fàcil.

    Gràcies

  14. Misael diu:

    hola! genial la forma i molt secilla
    Una pregunta, un cop ompli el DataGridView1 amb el DataSet ¿com podria obtenir algun valor d'una cel · la en específic, és a dir si kisiera el valor que té el DataGridView1 en a columna 1 de la fila 1?

  15. Claudio diu:

    Hola;
    Utilitzo Microsofty Visual Basic 2008 i acces com a base de dades .. en escriure el mateix codi que està exposat en aquesta pàgina em surt un error a la línia que diu: da.Fill (ds)

    l'error és: No es va controlar System.Data.OleDb.OleDbException
    ErrorCode = -2147467259
    Message = "No és un nom de fitxer vàlid."

    Podrien ajudar-me?
    Gràcies ...

  16. tato25 diu:

    hola a tots necessito ajuda per realitzar l'alta d'un registre fins a la connexió i enllaç de dades vaig bé però després per realitzar l'alta no em surt aquest és el codi
    conección:
    Private Sub Formclientes_Load (ByVal sender As System.Object, ByVal i As System.EventArgs) Handles MyBase.Load
    Dim conección As OleDbConnection
    conección = 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 clients"
    Dim daclientes As New OleDbDataAdapter (consultaclientes, conección)
    dsclientes = New DataSet ()
    daclientes.Fill (dsclientes, "clients")
    Dgvclientes.DataSource = dsclientes.Tables ("clients")

    botó afegir:
    Dim TABLACLIENTES As DataTable = New DataTable ("clients")
    Dim REGISTROCLIENTES As DataRow = TABLACLIENTES.NewRow
    REGISTROCLIENTES ("dni") = Me.TextBox1.Text
    REGISTROCLIENTES ("COGNOM") = Me.TextBox2.Text
    TABLACLIENTES.Rows.Add (REGISTROCLIENTES)
    que utilitzo per l'alta com faig per realitzar un alta nova però primer verificar si el registre ja existeix
    espere alguna resposta d'algun solidari gràcies

  17. Esborro diu:

    Gran Bèstia!!
    Ja m'havien cremat fins a les pestanyes

    Sóc usuari de VB6 i recent canviï a vb 2010

    GRÀCIES!!

  18. Jeysson diu:

    EM SEMBLA QUE AQUEST NO ÉS CODI PER VB 2010
    PORFAVOT ALGÚ SAP PER PUGUI ENSENYAR-
    QUISIEA APRENDRE AMB URGÈNCIA!

  19. Gav Rodhe diu:

    Excel · lent aportació. Felicitats em va servir moltissim. Estic Iniciant en el món del VB.NET. Encara tinc prou programació, però sempre cal exemples així quan canvies de llenguatge de programació. Salutacions

  20. Joan diu:

    No vaig veure res obert d'això, però vull amb formulari afegir dades en un base de dades en access i no puc, si algú podria ajudar agrairia

    salutacions

  21. Amaliam diu:

    Em va ser de molta ajuda, gràcies!

  22. Chilón diu:

    Komo camines kapo, mira tinc una pregunta, estic programant amb el VB. Net 2008 fa bastant no el faig servir, i bo estava reprenent. et comento.

    Vaig fer un mòdul on definitiva meu sentensia de coneccionn, i el data adapter i el data set, Vaig fer la conección al from però em salta un error n meva Coneccion.open, mira com ho vaig fer i decímetres si em podis ajudar ..

    MÒDUL

    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 \ usuari \ Els meus documents \ Pr Testear.mdb")
    Public DataAdap As New OleDbDataAdapter ("select * from [Club XXXX] order by NrodeSocio", ConecZion)
    Public dataset As New DataSet
    End Module

    [B] I ACA EL FROM [/ B]

    Private Sub FrmFormwork_Load (ByVal sender As System.Object, ByVal i 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

    I EM TIRA AQUEST ERROR

    No s'ha trobat el fitxer ISAM instal · lable.

    porq pot ser?? : S..

    espero resposta abraçada

  23. Marc diu:

    Gràcies per l'ajuda el problema que van comentar s'arregla creant una instància del DataSet que va ser declarat a l'inici per exemple el meu variable es diu registre llavors seria: Dim registre = New DataSet () i llest!

Comentar