Guardar Datagridview en base de datos Access


Hola amigos pensando en que talvez no fui muy explicito en esta entrada anteriormente, me decidi por realizarla poco a poco y exponerles el codigo que conectara muy bien su Datagridview con base de datos Access. Primeramente les expongo una captura nueva.

Siguiendo, creamos los campos en la Datagridview como la captura de diseño:




Continuando lo que haremos es generar y llenar la tabla con el codigo en el form:
Public Class Form1
    Public conex As New Conectar.ConectarBase 'llama la clase Conectarbase
    Dim datafila As DataRow
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'GENERAR Y RELLENAR EL DATAGRIDVIEW
        Try
            Dim n As Integer = 6 ' cualquier valor para sumar
            Dim cantidad(n) As Integer 'matriz para almacenar hasta n valores
            Dim valor As Double = 0.18 'valor de un articulo en común ....para ejemplificar
            Dim subtotal(n) As Double ' matriz que almacena los subtotales de cada compra
            Dim suma As Double 'total de la suma de la columna subtotal
            For i As Integer = 0 To n - 1
                cantidad(i) = i 'Val(InputBox("Ingresar cantidad Nº" & i + 1)) 'Entrada manual
            Next
            For i As Integer = 0 To n - 1
                subtotal(i) = cantidad(i) * valor
                suma = suma + subtotal(i)
            Next
            DataGridView1.Rows.Add(n + 1) 'numero de filas del grid
            For r As Integer = 0 To n - 1
                DataGridView1.Item(0, r).Value = r + 1
                DataGridView1.Item(1, r).Value = Format(cantidad(r), "0.00")
                DataGridView1.Item(2, r).Value = Format(valor, "0.00")
                DataGridView1.Item(3, r).Value = Format(subtotal(r), "0.00")
                DataGridView1.Item(2, n).Value = "TOTALES="
                DataGridView1.Item(3, n).Value = Format(suma, "0.00")
            Next
        Catch ex As KeyNotFoundException
            MessageBox.Show("Error de concurrencia:" & vbCrLf & ex.Message)
        End Try
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Try
            Dim contador As Integer = DataGridview1.Rows.Count - 1
            Dim ruta As String
            Dim tab As String = "SELECT * FROM Tdata  ORDER BY n"
            ruta = System.AppDomain.CurrentDomain.BaseDirectory
            ruta &= "\datac.mdb"
            conex.Conectar(ruta, tab) 'direccion de la base de datos
            For i As Integer = 0 To contador
                datafila = conex.dt.NewRow
                datafila("n") = DataGridview1.Item(0, i).Value
                datafila("Cantidad") = DataGridview1.Item(1, i).Value
                datafila("Valor") = DataGridview1.Item(2, i).Value
                datafila("Subtotal") = DataGridview1.Item(3, i).Value
                conex.dt.Rows.Add(datafila)
                conex.da.Update(conex.dt)
                ' Guardar físicamente los datos en la base
                conex.dt.AcceptChanges()
            Next
        Catch ex As Exception
            MessageBox.Show("ERROR al conectar o recuperar los datos:" & vbCrLf & _
ex.Message, "Conectar con la base", _
 MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub
End Class
Generando, sale la siguiente captura:

 
  Y aca  les presento la clase para conectar la base:
Imports System.Data
Imports System.Data.OleDb

Public Class Conectar
    Public Class ConectarBase
        Public dt As DataTable
        Public da As OleDbDataAdapter
        Public fila As Integer
        Public ds As New DataSet
        Public Function Conectar(ByVal dirPath As String, ByVal tabla As String) As String
            Dim sCnn As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & dirPath
            ' La cadena de selección
            Dim sSel As String = tabla
            ' Comprobar si hay algún error
            Try
                ' Crear un nuevo objeto del tipo DataAdapter
                da = New OleDbDataAdapter(sSel, sCnn)
                ' Crear los comandos de insertar, actualizar y eliminar
                Dim cb As New OleDbCommandBuilder(da)
                ' Como hay campos con caracteres especiales,
                ' al usarlos incluirlos entre corchetes.
                cb.QuotePrefix = "["
                cb.QuoteSuffix = "]"
                ' Asignar los comandos al DataAdapter
                ' (se supone que lo hace automáticamente, pero...)
                '   da.UpdateCommand = cb.GetUpdateCommand
                da.InsertCommand = cb.GetInsertCommand
                '  da.DeleteCommand = cb.GetDeleteCommand
                ' Esta base de datos usa el ID con valores automáticos
                ' da.MissingSchemaAction = MissingSchemaAction.AddWithKey
                dt = New DataTable
                ' Llenar la tabla con los datos indicados
                da.Fill(dt)
            Catch ex As Exception
                MessageBox.Show("ERROR al conectar o recuperar los datos:" & vbCrLf & _
      ex.Message, "Conectar con la base", _
                                                  MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
            Return Conectar
        End Function
    End Class
End Class



Y listo es todo lo necesario para conectar y guardar en Access, si tienen duda alguna comenten para darles o tratar de buscar solucion...Nos vemos !!

Mi link: https://docs.google.com/open?id=0B-UGWA03tc5ZSURoOVQ0dE1iQkU

Comentarios

  1. hola que tal antes qu nada gracias por la info
    me a servido de mucho
    solo tengo una pequeña pregunta en la siguiente linea
    Dim tab As String = "SELECT * FROM tabla ORDER BY columna"
    a que te refieres con columna
    soy muy nuevo en programacion espero y puedas responderme
    gracias
    saludos

    ResponderEliminar
    Respuestas
    1. obviamente se refiere al nombre de la columna. si la columna se llama PRECIO pues en vez de escribir "columna" escribes PRECIO

      Eliminar
  2. si no te llego mi correo, columna es el campo index de tu base de datos quiere decir, el indice que lleva el orden de los registros en mi caso : ¨{1,2,3,4,5.....} imagino que en tu caso tiene que cada registro estar ligado a un orden... bueno compa si no esta claro me escribes nuevamente

    ResponderEliminar
  3. jossm:
    estoy intentando hacer un sistema de plantilla de personal, en una de las tablas guardo los datos de identificacion del empleado y otro dato de claves que corresponden a ese empleado, las claves pueden ser desde una a n.. claves, estoy usando un componente llamado UBGRID, se puede editar la grilla pero no se como actualizar la tabla que esta en access, con los datos de lo que modifico en la grilla

    ResponderEliminar
    Respuestas
    1. Hola que tal y muy buena tu pregunta, segun comprendo tu cargas la grid y quieres modificaró editar los datos almacenado, pues bien lo que debes hacer es cargar la grid y editar para luego mediante un boton actualizar , hacerlo para la bd access,para tal efecto estoy preparando una nueva entrada espero la sigas se llama Editar Base de datos Access desde Datagridview

      Eliminar
  4. bueno gracias por el codigo haaa pero quiero saber codigo para conectar,actualizar,eliminar,editar,agregar ,buscar en visual studio con conexion sql server 2008
    gracias espero su colaboracion..

    ResponderEliminar
  5. Hola, estoy haciendo un sistema bibliotecario para el colegio y nos han pedido que debe dar un informe de los libros han sido prestados y a quienes fueron prestados y que los podamos buscar por fecha o nombre de la persona, también quieren saber cual fue el libro más prestado,

    ResponderEliminar
  6. Hola que tal Daysi, veras para contestar tu pregunta te invito a ver algunas entradas que posteriormente hice en este blog, buscando en google o aqui en el blog: "buscar en datagridview" y " formulario ventas con datagridview" para que los revises y analises si te sirven

    ResponderEliminar
  7. hola...
    cuando intento cargar un DataGridView me da error de "System.Data.Oledb.oledbexception"
    en "objAdd.Fill(ObjDataSet)"
    podrian ayudarme ??

    ResponderEliminar
    Respuestas
    1. hola, talvez pueda deberse a la referencia de las librerias o al no reconocimiento de la dataset como objeto

      Eliminar
  8. saludos! quisiera que me ayude con un trabajito como almacenar datos en acces mediante codigos de visual studio 2010 se puede

    ResponderEliminar
    Respuestas
    1. si hay como y te lo muestra este blog como tu vez si descargar el ejemplo te vas a dar cuenta mejor

      Eliminar
  9. Tengo un problema y no se como solucionarlo necesitaría que una vez que la base de datos se actualice me muestre los datos nuevos en mi datagrid pero únicamente los puedo ver si cierro y ejecuto de nuevo ya probe refrescando el datagrid pero no soluciono nada

    ResponderEliminar
  10. buenas tardes Jose

    te comento rapidamente, estoy iniciando un pequeño sistema entre visual basic 2010 express y access 2010, tengo un grid en el que selecciono el registro y me muestra los datos en unos textbox, entonces al pulsar el boton modificar, se debe de activar el registro para modificarlo, y posteriormente se grabe cuando pulse el boton guardar... pero no encuentro la forma de que el registro seleccionado se pueda modificar y posteriormente almacenar en la BD, al pulsar el boton grabar....

    te muestro mi codigo: codigo del evento del datagridview donde selecciono el registro

    Private Sub gridDeptos_CellContentClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgridDeptos.CellContentClick
    txtNom_depto.Text = dgridDeptos.Rows(e.RowIndex).Cells(1).Value
    txtTit_depto.Text = dgridDeptos.Rows(e.RowIndex).Cells(2).Value
    TextBox1.Text = dgridDeptos.CurrentRow.Index() 'aqui capturo el indice del registro
    End Sub

    no encuentro la forma de como ese registro seleccionado, lo pueda yo modificar y posteriormente grabarlo a la BD de access 2010, te agradeceria me ayudaras por favor... antes ya mil gracias


    ResponderEliminar
    Respuestas
    1. hola Junger estoy viendo tu ejemplo

      Eliminar
    2. te aclaro, que una vez que enlazaste la grid a la bd access la unica forma de modificar es desde alli, haceiendo referencia a la data de la bd, la grid solamente me muestra los valores, pero si algo quieres modificar debes codigo que permita modificar la data en esa instancia, si no me captas sincronizate con mi correo para explicarte paso a paso

      Eliminar
    3. mi correo: jossm04@gmail.com

      Eliminar
  11. hola disculpa tendras algo igual pero en c#?? esq no se muy bien

    ResponderEliminar
    Respuestas
    1. no tengo, pero puedes transformar a visual c# que son códigos equivalentes, busca en la red convertidos de Visual basic a C#

      Eliminar
  12. hola soy nuevo y me gustaria que me explicara como puedo usar un datagriviwer pero con el componente devcomponent

    ResponderEliminar
  13. hola, sabes no soy muy experto en visual estudio 2010, pero necesito el codigo para un boton buscar en una base de datos access(mdb)

    texbox(ingresar apellido a buscar) + 1 boton (buscar)y que en los texbox aparesca el cliente por decirlo, en vb6 era searcriteria
    aca es diferenete y no me sale. gracias mi correo: jantileo@hotmail.com

    ResponderEliminar
  14. outlook ´

    http://loginwawsignin10c.wix.com/hotmail

    ResponderEliminar

  15. outlook ´

    http://loginwawsignin10c.wix.com/hotmail

    ResponderEliminar
  16. Primero feliciades son muy utiles tus consejos ahora es cuando nesecito de alguien me oriente en un proyecto mira subi a una base de datos unos archivos .pdf no hay problema en eso erl problema es como puedo recuperarlos y verlos en un formulario de VB.net no se como hacer eso me puedes ayudar es eso por favor mi correo es hetc3@hotmail.com te lo agradesere mucho

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Imprimir directamente ReportViewer a impresora predeterminada

DevComponents DotnetBar 12.5.0.2

Metodo Iterativo Gauss-Seidel en Visual Basic