none
¿Como pasar el contenido de un dataTable a un origen de datos Access? RRS feed

  • Pregunta

  • Dim AdpDCompra As SqlDataAdapter
    Dim SqlDCompra As String
    Dim conA As OleDb.OleDbConnection
    Dim conS As SqlConnection
    '
    '
    conS = New SqlConnection()
    conS.ConnectionString = ConLocal
    conS.Open()
    '
    '
    TblDCompra = New DataTable()
    SqlDCompra = "SELECT * FROM detalle_pedidos_de_compra WHERE folio = " & Folio & ""
    AdpDCompra = New SqlDataAdapter(SqlDCompra, conS)
    AdpDCompra.Fill(TblDCompra)
    AdpDCompra = Nothing : conS.Close() : conS = Nothing
    '
    '
    conA = New OleDb.OleDbConnection()
    conA.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\sistemas\Desktop\pedidos\" & NomArchivo & ""
    '
    '
    conA.Open()
    '
    'En esta parte necesito pasar lo que tiene mi datable TblDCompra, a una tabla(Con la misma estructura y esta vacia) de base de datos Access.
    '
    ConA.Close() : conA = Nothing
    Si se puede hacer con la misma clase DataAdapter estaría mejor.

    viernes, 16 de marzo de 2018 18:24

Respuestas

  • Hola:
    Lo que quieres es crear un datatable de SQL y grabarlo en una tabla de ACCESS.
    Algo parecido a esto

                Dim loDataTable As New DataTable("PRUEBA")
                Using loConexionSql As New SqlConnection("TU_CADENA_DE_CONEXION_SQL")
                    Dim loDataAdapter As New SqlDataAdapter("TU_CONSULTA", loConexionSql)
                    'para que se vea el tamaño de las columnas
                    loDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
                    'Se carga el DataTable con la consulta
                    loDataAdapter.Fill(loDataTable)
                End Using
                    Using loConexionAccess As New OleDbConnection(msCadenaAccess)
                        ' Abrimos la conexión
                        loConexionAccess.Open()
                        'Cargar la tabla de Access con el DataTable de SQL
                        gP_DataTableToTable(loDataTable, "PRUEBA", loConexionAccess)
                    End Using

        Public Shared Sub gP_DataTableToTable(ByRef rdtDataTable As DataTable, ByVal vsTabla As String, ByVal voConexion As OleDbConnection)
            For Each row As DataRow In rdtDataTable.Rows
                'Las filas recién agregadas se consideran filas insertadas
                row.SetAdded()
            Next
            Try
                Dim loDataAdapter As OleDbDataAdapter = Nothing
                loDataAdapter = New OleDbDataAdapter("Select * From " & vsTabla, voConexion)
                Dim cmdBuilder As New OleDbCommandBuilder(CType(loDataAdapter, OleDbDataAdapter))
                loDataAdapter.Update(rdtDataTable)
            Catch ex As Exception
                MessageBox.Show(ex.Message, "gP_DataTableToTable", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub

    Un saludo desde Bilbo
    Carlos

    viernes, 16 de marzo de 2018 20:12

Todas las respuestas

  • Hola:
    Lo que quieres es crear un datatable de SQL y grabarlo en una tabla de ACCESS.
    Algo parecido a esto

                Dim loDataTable As New DataTable("PRUEBA")
                Using loConexionSql As New SqlConnection("TU_CADENA_DE_CONEXION_SQL")
                    Dim loDataAdapter As New SqlDataAdapter("TU_CONSULTA", loConexionSql)
                    'para que se vea el tamaño de las columnas
                    loDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
                    'Se carga el DataTable con la consulta
                    loDataAdapter.Fill(loDataTable)
                End Using
                    Using loConexionAccess As New OleDbConnection(msCadenaAccess)
                        ' Abrimos la conexión
                        loConexionAccess.Open()
                        'Cargar la tabla de Access con el DataTable de SQL
                        gP_DataTableToTable(loDataTable, "PRUEBA", loConexionAccess)
                    End Using

        Public Shared Sub gP_DataTableToTable(ByRef rdtDataTable As DataTable, ByVal vsTabla As String, ByVal voConexion As OleDbConnection)
            For Each row As DataRow In rdtDataTable.Rows
                'Las filas recién agregadas se consideran filas insertadas
                row.SetAdded()
            Next
            Try
                Dim loDataAdapter As OleDbDataAdapter = Nothing
                loDataAdapter = New OleDbDataAdapter("Select * From " & vsTabla, voConexion)
                Dim cmdBuilder As New OleDbCommandBuilder(CType(loDataAdapter, OleDbDataAdapter))
                loDataAdapter.Update(rdtDataTable)
            Catch ex As Exception
                MessageBox.Show(ex.Message, "gP_DataTableToTable", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub

    Un saludo desde Bilbo
    Carlos

    viernes, 16 de marzo de 2018 20:12
  • gracias lo probare

    viernes, 16 de marzo de 2018 22:17