none
Insertar datos de un DataGrid a una tabla RRS feed

  • Pregunta

  • En un formulario tengo dos botones y un grid. Un boton me importa datos de un excel al grid y el otro boton el grid a la tabla. Funciona bien solo que me trae la primera linea del grid (no el titulo de la columna, la primera fila de datos del grid). Podrian ayudarme?

           

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

            Dim conexion As New OleDbConnection
            Dim comando As New OleDbCommand


            If DataGridView1.Rows.Count = 0 Then
                MsgBox("No hay datos cargados para guardar", vbCritical, LoginForm.titulostr)
                Return

            Else

                Try
                    conexion.ConnectionString = LoginForm.constring
                    conexion.Open()

                    comando = New OleDbCommand("INSERT INTO BaseDePagos ( CodIdentificacion, FechaDePago, MontoDelPago, ClienteEmpresa, Observacion, ConceptoDePago) VALUES (@cod, @fchapago, @montopago, @cliente, @obs, @concep)", conexion)

                    For Each row As DataGridViewRow In Me.DataGridView1.Rows
                         


                        comando.Parameters.AddWithValue("@cod", Convert.ToString(row.Cells("CodIdentificacion").Value))
                        comando.Parameters.AddWithValue("@fchapago", Convert.ToString(row.Cells("FechaDePago").Value))
                        comando.Parameters.AddWithValue("@montopago", Convert.ToString(row.Cells("MontoDelPago").Value))
                        comando.Parameters.AddWithValue("@cliente", Convert.ToString(row.Cells("ClienteEmpresa").Value))
                        comando.Parameters.AddWithValue("@obs", Convert.ToString(row.Cells("Observacion").Value))
                        comando.Parameters.AddWithValue("@concep", Convert.ToString(row.Cells("ConceptoDePago").Value))

                        comando.ExecuteNonQuery()
                    Next



                    MsgBox("Los pagos fueron cargados correctamente", vbInformation, LoginForm.titulostr)

                    DataGridView1.Columns.Clear()

                Catch ex As Exception
                    MsgBox(ex.Message, vbCritical, LoginForm.titulostr)
                End Try

                conexion.Close()
                conexion.Dispose()

            End If
        End Sub

    Gracias y saludos


    sábado, 5 de octubre de 2019 21:31

Respuestas

  • Hola Ender, contesto por mi respuesta por si te sirve, fijate que seguramente te está cargado el ultimo registro o sea NewRow por eso el error, supongo. Para descartar que sea eso puedes optar por verifcar el ultimo row y salir del for o evitar que se genere un row por usuario (row que se genera automaticamente) mediante DGV.AllonwUserToAddrow = false . Si optas por la primera opción colocas inmediatamente de For Each

    For Each row As DataGridViewRow In DGV1.Rows If row.Index = DGV1.NewRowIndex Then Exit For End If

     Command.Parameters.AddWhidValue............()

    ..................................

     Slaudos y comenta


    ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗



    • Editado Marcelo PF martes, 22 de octubre de 2019 0:14
    • Marcado como respuesta EnderGalaxia sábado, 4 de enero de 2020 6:28
    lunes, 21 de octubre de 2019 23:55
  • Hola:
    Prueba el siguiente ejemplo.
    En un Form como el de la imagen, copia y pega el siguiente codigo

    Option Explicit On
    Option Strict On
    Imports System.Data.OleDb
    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            btnCargaTabla.Enabled = False
            btnCargaDGV.Enabled = False
            DataGridView1.AllowUserToAddRows = False
        End Sub
        Private Sub btnAccess_Click(sender As Object, e As EventArgs) Handles btnAccess.Click
            Try
                With odlgFichero
                    ' Comprobar que el archivo seleccionado existe. El cuadro de diálogo muestra una advertencia en caso contrario.
                    .CheckFileExists = True
                    ' Comprobar que la ruta de acceso seleccionada existe. El cuadro de diálogo muestra una advertencia en caso contrario.
                    .CheckPathExists = True
                    ' Obtener o establecer una extensión predeterminada. No incluye el "." inicial.
                    .DefaultExt = "accdb"
                    .Filter = "Base Datos Access (*.accdb)|*.accdb|All files|*.*"
                    .Multiselect = False
                    .InitialDirectory = "c:\"
                    ' ¿Restaurar el directorio original después de seleccionar un archivo? Si False, el directorio actual cambia al directorio en el que seleccionó el archivo.
                    ' Establézcalo como True para poner la carpeta actual de nuevo donde estaba cuando comenzó.El valor predeterminado es False.
                    .RestoreDirectory = True
                    .Title = "Seleccione el Fichero"
                    ' ¿Aceptar sólo nombres de archivo Win32 válidos?
                    .ValidateNames = True
                    If .ShowDialog = DialogResult.OK Then
                        Me.txtAccess.Text = .FileName
                        If Me.txtAccess.Text.Length > 0 And Me.txtExcel.Text.Length > 0 Then
                            btnCargaDGV.Enabled = True
                        Else
                            btnCargaDGV.Enabled = False
                        End If
                    End If
                End With
            Catch ex As Exception
                MessageBox.Show(ex.Message, "btnAccess_Click", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub
        Private Sub btnExcel_Click(sender As Object, e As EventArgs) Handles btnExcel.Click
            Try
                With odlgFichero
                    ' Comprobar que el archivo seleccionado existe. El cuadro de diálogo muestra una advertencia en caso contrario.
                    .CheckFileExists = True
                    ' Comprobar que la ruta de acceso seleccionada existe. El cuadro de diálogo muestra una advertencia en caso contrario.
                    .CheckPathExists = True
                    ' Obtener o establecer una extensión predeterminada. No incluye el "." inicial.
                    .DefaultExt = "xlsx"
                    .Filter = "Ficheros Excel (*.xlsx)|*.xlsx|All files|*.*"
                    .Multiselect = False
                    .InitialDirectory = "c:\"
                    ' ¿Restaurar el directorio original después de seleccionar un archivo? Si False, el directorio actual cambia al directorio en el que seleccionó el archivo.
                    ' Establézcalo como True para poner la carpeta actual de nuevo donde estaba cuando comenzó.El valor predeterminado es False.
                    .RestoreDirectory = True
                    .Title = "Seleccione el Fichero"
                    ' ¿Aceptar sólo nombres de archivo Win32 válidos?
                    .ValidateNames = True
                    If .ShowDialog = DialogResult.OK Then
                        Me.txtExcel.Text = .FileName
                        If Me.txtAccess.Text.Length > 0 And Me.txtExcel.Text.Length > 0 Then
                            btnCargaDGV.Enabled = True
                        Else
                            btnCargaDGV.Enabled = False
                        End If
                    End If
                End With
            Catch ex As Exception
                MessageBox.Show(ex.Message, "btnExcel_Click", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub
        Private Sub btnCargaDGV_Click(sender As Object, e As EventArgs) Handles btnCargaDGV.Click
            Me.Cursor = Cursors.WaitCursor
            Dim lsCadConexionExcel As String = "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=" & Me.txtExcel.Text & ";Extended Properties = 'Excel 12.0;Xml;HDR=Yes'"
            Try
                Dim loDataTable As New DataTable()
                Using loConexionExcel As New OleDbConnection(lsCadConexionExcel)
                    Dim lsQuery As String = "Select * From [Hoja1$]"
                    Dim loDataAdapter As New OleDbDataAdapter(lsQuery, loConexionExcel)
                    'Cargar el Datatable con el fichero XLS
                    loDataAdapter.Fill(loDataTable)
                    'Cargar el DGV
                    DataGridView1.DataSource = loDataTable
                End Using
                btnCargaDGV.Enabled = False
                btnCargaTabla.Enabled = True
            Catch ex As Exception
                Me.Cursor = Cursors.Default
                MessageBox.Show(ex.Message, "btnCargaDGV_Click", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
            Me.Cursor = Cursors.Default
        End Sub
        Private Sub btnCargaTabla_Click(sender As Object, e As EventArgs) Handles btnCargaTabla.Click
            Me.Cursor = Cursors.WaitCursor
            Dim lsCadConexionAccess As String = "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=" & Me.txtAccess.Text
            Dim rdtDataTable As DataTable = CType(DataGridView1.DataSource, DataTable)
            For Each row As DataRow In rdtDataTable.Rows
                'Las filas recién agregadas se consideran filas insertadas
                row.SetAdded()
            Next
            Try
                Using loConexionAccess As New OleDbConnection(lsCadConexionAccess)
                    loConexionAccess.Open()
                    Using loDataAdapter As New OleDbDataAdapter("SELECT * FROM BaseDePagos", loConexionAccess)
                        Dim cmdBuilder As New OleDbCommandBuilder(loDataAdapter)
                        loDataAdapter.Update(rdtDataTable)
                    End Using
                End Using
                btnCargaTabla.Enabled = False
            Catch ex As Exception
                Me.Cursor = Cursors.Default
                MessageBox.Show(ex.Message, "btnCargaTabla_Click", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
            Me.Cursor = Cursors.Default
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos
    • Marcado como respuesta EnderGalaxia sábado, 4 de enero de 2020 6:28
    martes, 22 de octubre de 2019 6:06

Todas las respuestas

  • Hola, deber limpiar los Parametros en cada interacción sino siempre cargara el mismo 

    For Each row as.........

    Command.Parameters.Clear()

     Command.Parameters.AddWhidValue............

    ............................

    ................................

    ............................

     Next


    ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗



    • Editado Marcelo PF domingo, 6 de octubre de 2019 6:11
    • Propuesto como respuesta Pablo Rubio miércoles, 9 de octubre de 2019 15:57
    sábado, 5 de octubre de 2019 23:06
  • Hola;
    ¿Como cargas los datos desde excel hasta el DGV?
    Si cargas los datos desde excel hasta un datatable y luego haces
    DGV.Datasource=TUDataTable, entonces NO necesitas hacer el For Each para cargar
    los datos desde el datatable hasta la BD.

    P.D.

    Cuando se insertan, modifican o eliminan mas de 1 registro, se tiene que iniciar una transacción,

    ¿Qué pasaría si a mitad de proceso, se produce algún error?

    Pues que tendrías un lio enorme


    Un saludo desde Bilbo
    Carlos
    domingo, 6 de octubre de 2019 6:45
  • Public Function ImportExcellToDataGridView(ByRef path As String, ByVal Datagrid As DataGridView)

            Try
                Dim cnConex As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & path & "';" & _
                    "Excel 12.0;Xml;HDR=YES;IMEX=2")
                Dim Cmd As New OleDbCommand("Select * From [Hoja1$]")
                Dim Ds As New DataSet
                Dim Da As New OleDbDataAdapter
                Dim Dt As New DataTable
                cnConex.Open()
                Cmd.Connection = cnConex
                Da.SelectCommand = Cmd
                Da.Fill(Ds)
                Dt = Ds.Tables(0)
                Datagrid.DataSource = Dt

            Catch ex As Exception
                MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")
            End Try
            Return True
        End Function

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

            Dim openFD As New OpenFileDialog()
            With openFD
                .Title = LoginForm.titulostr
                .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
                    ImportExcellToDataGridView(.FileName, DataGridView1)
                    DataGridView1.AutoResizeColumns()
                    DataGridView1.RowsDefaultCellStyle.BackColor = Color.White
                    DataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue

                End If
            End With

        End Sub

    Post MSDN

    sábado, 19 de octubre de 2019 4:31
  • Hola:
    Una vez que has cargado el DataTable con la siguiente instruccion
    Da.Fill(Dt)

    El Dataset te sobra, cambia por esto

    Try
        Dim cnConex As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & path & "';Excel 12.0;Xml;HDR=YES;IMEX=2")
        Dim Cmd As New OleDbCommand("Select * From [Hoja1$]")
        Dim Da As New OleDbDataAdapter
        Dim Dt As New DataTable
        Cmd.Connection = cnConex
        Da.SelectCommand = Cmd
        Da.Fill(Dt)
        Datagrid.DataSource = Dt
              
        gP_DataTableToTable(Dt, TU_TABLA_ACCESS)
             
    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")
    End Try
    Private Sub gP_DataTableToTable(ByRef rdtDataTable As DataTable, ByVal vsTabla As String)
        For Each row As DataRow In rdtDataTable.Rows
            'Las filas recién agregadas se consideran filas insertadas
            row.SetAdded()
        Next
        Try
            Using loConexionAccess As New OleDbConnection(TU_CADENA_DE_CONEXION)
                loConexionAccess.Open()
                Using loDataAdapter As New OleDbDataAdapter("Select * From " & vsTabla, loConexionAccess)
                    Dim cmdBuilder As New OleDbCommandBuilder(loDataAdapter)
                    loDataAdapter.Update(rdtDataTable)
                End Using
            End Using
        Catch ex As Exception
            MessageBox.Show(ex.Message, "gP_DataTableToTable", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End Try
    End Sub

    Un saludo desde Bilbo
    Carlos


    sábado, 19 de octubre de 2019 5:01
  • Hola. Probe asi, cuando ejecuto me da error: no coinciden los tipos de criterios. Pero aun asi, aunque de este error, se cumple, osea, si me cara todas las lineas del grid en la tabla

    Post MSDN

    sábado, 19 de octubre de 2019 5:11
  • Hola:

    ¿En que linea te da el error?

    Un saludo desde Bilbo

    Carlos

    sábado, 19 de octubre de 2019 8:56
  • Hola. Probe asi, cuando ejecuto me da error: no coinciden los tipos de criterios. Pero aun asi, aunque de este error, se cumple, osea, si me cara todas las lineas del grid en la tabla

    Post MSDN

    este msj era para la respuesta de marcelo pf

    Post MSDN

    lunes, 21 de octubre de 2019 20:02
  • Hola:
    Una vez que has cargado el DataTable con la siguiente instruccion
    Da.Fill(Dt)

    El Dataset te sobra, cambia por esto

    Try
        Dim cnConex As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & path & "';Excel 12.0;Xml;HDR=YES;IMEX=2")
        Dim Cmd As New OleDbCommand("Select * From [Hoja1$]")
        Dim Da As New OleDbDataAdapter
        Dim Dt As New DataTable
        Cmd.Connection = cnConex
        Da.SelectCommand = Cmd
        Da.Fill(Dt)
        Datagrid.DataSource = Dt
              
        gP_DataTableToTable(Dt, TU_TABLA_ACCESS)
             
    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")
    End Try
    Private Sub gP_DataTableToTable(ByRef rdtDataTable As DataTable, ByVal vsTabla As String)
        For Each row As DataRow In rdtDataTable.Rows
            'Las filas recién agregadas se consideran filas insertadas
            row.SetAdded()
        Next
        Try
            Using loConexionAccess As New OleDbConnection(TU_CADENA_DE_CONEXION)
                loConexionAccess.Open()
                Using loDataAdapter As New OleDbDataAdapter("Select * From " & vsTabla, loConexionAccess)
                    Dim cmdBuilder As New OleDbCommandBuilder(loDataAdapter)
                    loDataAdapter.Update(rdtDataTable)
                End Using
            End Using
        Catch ex As Exception
            MessageBox.Show(ex.Message, "gP_DataTableToTable", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End Try
    End Sub

    Un saludo desde Bilbo
    Carlos


    no funciona. El Private Sub gP_DataTableToTable se debe ejecutar en lugar del codigo del boton?, Veo que es un solo codigo porque solo hay un end sub, no lo entiendo.

    Como dije en el post, tengo dos botones y un datagrid; el boton q me carga el excel en el grid funciona perfecto, el otro boton me debe llevar el datagrid a la tabla, lo que me propones no me sirve xq en el grid necesito que se corrija, si es necesario, algun dato que el usuario considere que debe cambiar, por eso necesito que el grid vaya a la tabla, por eso puse dos botones y el codigo que escribi es para que me recorra todo el grid y lo guarde. El codigo funaciona, me lleva los datos del grid a la tabla, pero en lugar de darme un msj de ok me muestra el msj de excepcion. 

    Podrias ayudarme con eso?. El codigo es este:

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Dim conexion As New OleDbConnection
            Dim comando As New OleDbCommand
            


            If DataGridView1.Rows.Count = 0 Then
                MsgBox("No hay datos cargados para guardar", vbCritical, LoginForm.titulostr)
                Return

            Else

                Try
                    conexion.ConnectionString = LoginForm.constring
                    conexion.Open()

                    comando = New OleDbCommand("INSERT INTO BaseDePagos ( CodIdentificacion, FechaDePago, MontoDelPago, ClienteEmpresa, Observacion, ConceptoDePago) VALUES (@cod, @fchapago, @montopago, @cliente, @obs, @concep)", conexion)

                    For Each row As DataGridViewRow In Me.DataGridView1.Rows

                        comando.Parameters.Clear()

                        comando.Parameters.AddWithValue("@cod", Convert.ToString(row.Cells("CodIdentificacion").Value))
                        comando.Parameters.AddWithValue("@fchapago", Convert.ToString(row.Cells("FechaDePago").Value))
                        comando.Parameters.AddWithValue("@montopago", Convert.ToString(row.Cells("MontoDelPago").Value))
                        comando.Parameters.AddWithValue("@cliente", Convert.ToString(row.Cells("ClienteEmpresa").Value))
                        comando.Parameters.AddWithValue("@obs", Convert.ToString(row.Cells("Observacion").Value))
                        comando.Parameters.AddWithValue("@concep", Convert.ToString(row.Cells("ConceptoDePago").Value))

                        comando.ExecuteNonQuery()
                    Next

                    MsgBox("Los pagos fueron cargados correctamente", vbInformation, LoginForm.titulostr)

                    DataGridView1.Columns.Clear()

                Catch ex As Exception
                    MsgBox(ex.Message, vbCritical, LoginForm.titulostr)
                End Try

                conexion.Close()
                conexion.Dispose()

            End If
        End Sub


    Post MSDN

    lunes, 21 de octubre de 2019 20:13
  • Hola Ender, contesto por mi respuesta por si te sirve, fijate que seguramente te está cargado el ultimo registro o sea NewRow por eso el error, supongo. Para descartar que sea eso puedes optar por verifcar el ultimo row y salir del for o evitar que se genere un row por usuario (row que se genera automaticamente) mediante DGV.AllonwUserToAddrow = false . Si optas por la primera opción colocas inmediatamente de For Each

    For Each row As DataGridViewRow In DGV1.Rows If row.Index = DGV1.NewRowIndex Then Exit For End If

     Command.Parameters.AddWhidValue............()

    ..................................

     Slaudos y comenta


    ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗



    • Editado Marcelo PF martes, 22 de octubre de 2019 0:14
    • Marcado como respuesta EnderGalaxia sábado, 4 de enero de 2020 6:28
    lunes, 21 de octubre de 2019 23:55
  • Hola:
    Prueba el siguiente ejemplo.
    En un Form como el de la imagen, copia y pega el siguiente codigo

    Option Explicit On
    Option Strict On
    Imports System.Data.OleDb
    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            btnCargaTabla.Enabled = False
            btnCargaDGV.Enabled = False
            DataGridView1.AllowUserToAddRows = False
        End Sub
        Private Sub btnAccess_Click(sender As Object, e As EventArgs) Handles btnAccess.Click
            Try
                With odlgFichero
                    ' Comprobar que el archivo seleccionado existe. El cuadro de diálogo muestra una advertencia en caso contrario.
                    .CheckFileExists = True
                    ' Comprobar que la ruta de acceso seleccionada existe. El cuadro de diálogo muestra una advertencia en caso contrario.
                    .CheckPathExists = True
                    ' Obtener o establecer una extensión predeterminada. No incluye el "." inicial.
                    .DefaultExt = "accdb"
                    .Filter = "Base Datos Access (*.accdb)|*.accdb|All files|*.*"
                    .Multiselect = False
                    .InitialDirectory = "c:\"
                    ' ¿Restaurar el directorio original después de seleccionar un archivo? Si False, el directorio actual cambia al directorio en el que seleccionó el archivo.
                    ' Establézcalo como True para poner la carpeta actual de nuevo donde estaba cuando comenzó.El valor predeterminado es False.
                    .RestoreDirectory = True
                    .Title = "Seleccione el Fichero"
                    ' ¿Aceptar sólo nombres de archivo Win32 válidos?
                    .ValidateNames = True
                    If .ShowDialog = DialogResult.OK Then
                        Me.txtAccess.Text = .FileName
                        If Me.txtAccess.Text.Length > 0 And Me.txtExcel.Text.Length > 0 Then
                            btnCargaDGV.Enabled = True
                        Else
                            btnCargaDGV.Enabled = False
                        End If
                    End If
                End With
            Catch ex As Exception
                MessageBox.Show(ex.Message, "btnAccess_Click", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub
        Private Sub btnExcel_Click(sender As Object, e As EventArgs) Handles btnExcel.Click
            Try
                With odlgFichero
                    ' Comprobar que el archivo seleccionado existe. El cuadro de diálogo muestra una advertencia en caso contrario.
                    .CheckFileExists = True
                    ' Comprobar que la ruta de acceso seleccionada existe. El cuadro de diálogo muestra una advertencia en caso contrario.
                    .CheckPathExists = True
                    ' Obtener o establecer una extensión predeterminada. No incluye el "." inicial.
                    .DefaultExt = "xlsx"
                    .Filter = "Ficheros Excel (*.xlsx)|*.xlsx|All files|*.*"
                    .Multiselect = False
                    .InitialDirectory = "c:\"
                    ' ¿Restaurar el directorio original después de seleccionar un archivo? Si False, el directorio actual cambia al directorio en el que seleccionó el archivo.
                    ' Establézcalo como True para poner la carpeta actual de nuevo donde estaba cuando comenzó.El valor predeterminado es False.
                    .RestoreDirectory = True
                    .Title = "Seleccione el Fichero"
                    ' ¿Aceptar sólo nombres de archivo Win32 válidos?
                    .ValidateNames = True
                    If .ShowDialog = DialogResult.OK Then
                        Me.txtExcel.Text = .FileName
                        If Me.txtAccess.Text.Length > 0 And Me.txtExcel.Text.Length > 0 Then
                            btnCargaDGV.Enabled = True
                        Else
                            btnCargaDGV.Enabled = False
                        End If
                    End If
                End With
            Catch ex As Exception
                MessageBox.Show(ex.Message, "btnExcel_Click", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub
        Private Sub btnCargaDGV_Click(sender As Object, e As EventArgs) Handles btnCargaDGV.Click
            Me.Cursor = Cursors.WaitCursor
            Dim lsCadConexionExcel As String = "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=" & Me.txtExcel.Text & ";Extended Properties = 'Excel 12.0;Xml;HDR=Yes'"
            Try
                Dim loDataTable As New DataTable()
                Using loConexionExcel As New OleDbConnection(lsCadConexionExcel)
                    Dim lsQuery As String = "Select * From [Hoja1$]"
                    Dim loDataAdapter As New OleDbDataAdapter(lsQuery, loConexionExcel)
                    'Cargar el Datatable con el fichero XLS
                    loDataAdapter.Fill(loDataTable)
                    'Cargar el DGV
                    DataGridView1.DataSource = loDataTable
                End Using
                btnCargaDGV.Enabled = False
                btnCargaTabla.Enabled = True
            Catch ex As Exception
                Me.Cursor = Cursors.Default
                MessageBox.Show(ex.Message, "btnCargaDGV_Click", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
            Me.Cursor = Cursors.Default
        End Sub
        Private Sub btnCargaTabla_Click(sender As Object, e As EventArgs) Handles btnCargaTabla.Click
            Me.Cursor = Cursors.WaitCursor
            Dim lsCadConexionAccess As String = "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=" & Me.txtAccess.Text
            Dim rdtDataTable As DataTable = CType(DataGridView1.DataSource, DataTable)
            For Each row As DataRow In rdtDataTable.Rows
                'Las filas recién agregadas se consideran filas insertadas
                row.SetAdded()
            Next
            Try
                Using loConexionAccess As New OleDbConnection(lsCadConexionAccess)
                    loConexionAccess.Open()
                    Using loDataAdapter As New OleDbDataAdapter("SELECT * FROM BaseDePagos", loConexionAccess)
                        Dim cmdBuilder As New OleDbCommandBuilder(loDataAdapter)
                        loDataAdapter.Update(rdtDataTable)
                    End Using
                End Using
                btnCargaTabla.Enabled = False
            Catch ex As Exception
                Me.Cursor = Cursors.Default
                MessageBox.Show(ex.Message, "btnCargaTabla_Click", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
            Me.Cursor = Cursors.Default
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos
    • Marcado como respuesta EnderGalaxia sábado, 4 de enero de 2020 6:28
    martes, 22 de octubre de 2019 6:06