Cargar Hoja de Excel a Access mediante Datagridview


Hola amigos una vez  más, en este post voy a exponerles un ejemplo que  gracias y por codigos de uno de mis amigos de la red José De la Cruz Giron Funes (Honduras) lo adapte y le di unas mejoras para cubrir unas cuestiones que el hacia....gracias Jose por seguir mis pub..Bueno yendo al grano esta aplicación lo que hace es abrir una hoja de excel y la carga en la datagridview y a su vez  con otro boton a esa grid la guarda en una base de datos access previamente seleccionada.

Mi captura de la app en diseño



Ahora los codigos

Imports System.Data.OleDb
Public Class Form1
    Public conex As New Conectar.ConectarBase 'llama la clase Conectarbase
    Dim datafila As DataRow
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim xlRuta As String = ""
        Dim Open As New OpenFileDialog
        With Open
            .Title = "Seleccionar Archivo"
            .Filter = "Archivos Excel(*.xls;*.xlsx)|*.xls;*xlsx|Todos los archivos(*.*)|*.*"
            .Multiselect = False
            .InitialDirectory = My.Computer.FileSystem.SpecialDirectories.Desktop
            If .ShowDialog = Windows.Forms.DialogResult.OK Then
                xlRuta = .FileName
            End If
        End With
        Try
            Dim xlconection As String = ("Provider=Microsoft.ACE.OLEDB.12.0;" & ("Data Source=" & (xlRuta & ";Extended Properties=""Excel 12.0;xml; HDR=Yes;IMEX=2"";")))
            Dim enconex As New OleDbConnection(xlconection)
            Dim cmd As New OleDbCommand("Select * From [Hoja1$]")
            Dim ds As New DataSet
            Dim da As New OleDbDataAdapter
            Dim dt As New DataTable
            enconex.Open()
            cmd.Connection = enconex
            da.SelectCommand = cmd
            da.Fill(ds)
            dt = ds.Tables(0)
            Me.DataGridView1.Columns.Clear()
            Me.DataGridView1.DataSource = dt
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")
        End Try
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim xlRuta As String = ""
        Dim Open As New OpenFileDialog
        With Open
            .Title = "Seleccionar Archivo"
            .Filter = "Archivos Access(*.mdb;*.accdb)|*.mdb;*.accdb|Todos los archivos(*.*)|*.*"
            .Multiselect = False
            .InitialDirectory = My.Computer.FileSystem.SpecialDirectories.Desktop
            If .ShowDialog = Windows.Forms.DialogResult.OK Then
                xlRuta = .FileName
            End If
        End With
        Try
            Dim contador As Integer = DataGridView1.Rows.Count - 1
            Dim ruta As String
            Dim tab As String = "SELECT * FROM Mydata  ORDER BY n1"
            ruta = xlRuta '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("nombre") = DataGridView1.Item(0, i).Value
                datafila("n1") = DataGridView1.Item(1, i).Value
                datafila("n2") = DataGridView1.Item(2, i).Value
                datafila("n3") = DataGridView1.Item(3, i).Value
                datafila("n4") = DataGridView1.Item(4, 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

 La clase para guardar en Access

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.ACE.OLEDB.12.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 por ultimo la App en Acción



El proyecto: https://mega.co.nz/#!ddNz3Zwa!IjXO4WK3g0T6YXuZk5rG122RmZQ9iVdBqWyvj9Oyrcg

Espero les  sea de provecho y nos vemos en otra entrega

Comentarios

  1. Excelente Jose Luis voy a implementarlo inmediatamente en mi proyecto......Mil gracias por ese gran aporte

    ResponderEliminar
  2. Mil gracias Jose Luis no sabe que tanto me va ayudar esto, con esto mi proyecto será de mejor calidad, atte Jose de la Cruz Giron

    ResponderEliminar
  3. Es excelente tu aporte me a ahorrado buen tiempo , aprecio mucho tu tiempo por compartirlo

    muchas gracias

    ah! despues de probarlo no me actualiza solo añade registros a BD acces, por favor una ayuda para que actualize sin volver a insertarlo

    atte.
    Aladino Aliaga (Peru)

    ResponderEliminar
  4. buena idea, voy a ver que se puede hacer

    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