Acceso a Base de Datos con Microsoft Access

Actualizar datos con un DataSet

 

Fecha: 12/Ago/2005 (10-08-05)
Autor: Facundo Dhers

 


Actualizar datos modificados en un DataSet

Este articulo pretende explicar como hacer de una manera simple para actualizar una Base de Datos Access desde un DataSet. Para nuestro ejemplo usaremos un DataGrid que nos permitirá codificar los datos de una manera ágil.

Un modo rápido de guardar cambios

Para nuestro ejemplo en un Formulario agregaremos un DataGrid (DataGrid1) y un botón (Button1) que nos ayudará a ver claramente el procedimiento para guardar.
Nuestro DataSet no será tipado ya que es solo un ejemplo, pero se recomienda utilizar DataSets Tipados ya que agilizan mucho la programación

Dim Ds As Data.DataSet 

Crearemos un Procedimiento que llamé "Datos" que será el encargado de Llenar el DataSet y de Guardar los datos cuando sea necesario.


'Este procedimiento se conectará a la base de datos, guardará los datos y volverá
'a llenar el DataSet
Private Sub Datos()
        Try
            'Crea la conexión a la base de Access
            Dim Con As OleDbConnection = New OleDbConnection("Data Source=..\bd1.mdb;" & _
                                         "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                                         "Mode=Share Deny None;User ID=Admin")

            'Query a la tabla que se desea manejar
            Dim Query As String = "select * from tabla1 where Categoria='Bebidas'"

            'Crea el Adaptador a la tabla seleccionada
            Dim Adap As OleDbDataAdapter = New OleDbDataAdapter(Query, Con)

            'Crea automáticamente los comandos (Select, update, insert, delete)
            'Si esta línea no estuviera, tendríamos que crear los comandos manualmente
            Dim Cmd As OleDbCommandBuilder = New OleDbCommandBuilder(Adap)

            'Si ya existe la tabla actualiza los datos que tenía
            If Not Ds.Tables("Tabla1") Is Nothing Then
                'Actualiza los datos en la base de datos
                Adap.Update(Ds, "Tabla1")

                'Borra la información de la tabla para no duplicar los datos
                'Esto no se verá reflejado en la Base de Datos
                'NOTA: si hay relaciones referenciales, hay que actualizar
                'tanto la tabla Parent como la Child
                Ds.Tables("Tabla1").Clear()
            End If

            'Llena el DataSet con los datos de la base de datos
            'Esto sirve en el caso que la base pueda tener varios usuarios
            'simultáneos, si no es el caso, usar Update para guardar los 
            'cambios y Fill para llenar el DS
            Adap.Fill(Ds, "Tabla1")

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

Al evento Click del Botón le agregaremos la llamada:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'Guarda los nuevos valores del Dataset DS
        Datos()
    End Sub

Y al evento Load de nuestro Formulario le agregaremos la llamada:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Llena el DataSet DS
        Datos()

        'Crea el DataBinding para que el Data Grid Muestre 
        'los datos de la "Tabla1" del DataSet DS
        Me.DataGrid1.SetDataBinding(Ds, "Tabla1")
    End Sub

Adjunto les envio el proyecto que utilicé donde está la Base de Datos bd1.mdb (en Access 2003). Esta Base tiene una Tabla llamada "Tabla1" que tiene 4 campos: ID (autonumérico), Categoria (Texto 50), Producto (Texto 50) y Descripción (Texto 200)


Espacios de nombres usados en el código de este artículo:

System.Data
System.Data.OleDb

 


Fichero con el código de ejemplo: facund_AccesoBaseDeDatosAccess_VB.zip - Tamaño 33,56 KB


ir al índice