Exportación de todos los datos de una base de datos de Microsoft Access

Se aplica a: Access 2024, Access 2021

En este tema se explica cómo un administrador de TI puede exportar todos los datos y objetos de una base de datos de Microsoft Access a archivos de texto, lo que permite su uso con otras herramientas y admite la portabilidad de datos.

Para los datos almacenados en tablas, los datos se pueden exportar a una variedad de otros formatos mediante asistentes de Access, como Excel, vea Exportar datos a Excel o texto, vea Exportar datos a un archivo de texto.

En las instrucciones siguientes se muestra cómo exportar objetos mediante código VBA, mediante el comando del método DoCmd.TransferText para exportar datos de tabla y el comando Application.SaveAsText para otros objetos.

El código proporcionado creará una función a la que se puede llamar con la ruta de acceso completa a una base de datos y una carpeta de destino. A continuación, creará un archivo de texto para cada objeto de la base de datos, que contendrá los datos de las tablas y las definiciones de todos los objetos creados por el usuario, como formularios o informes.

Dado que este proceso usa la automatización OLE, el código también se puede escribir con PowerShell o con un lenguaje .NET como C#. En este ejemplo, usamos VBA.

  1. Cree una nueva base de datos.
  2. Cree un nuevo módulo.
  3. Copie y pegue el siguiente código de base de datos de exportación en el módulo.
  4. Para cada base de datos que desee exportar, escriba el siguiente comando en la ventana inmediata:

    ExportAccessDatabase "_Full path to database_", "_Folder to contain exported objects_"
    1. Tenga en cuenta que se creará una nueva carpeta en la carpeta de destino con el nombre de la base de datos exportada. Esto permite exportar varias bases de datos a la misma carpeta de destino y mantener el contenido de cada base de datos exportada en una carpeta independiente.
    2. Si la base de datos que se va a exportar contiene un formulario de inicio o una macro AutoExec, las acciones de inicio pueden interferir con el proceso de exportación, por lo que debe restablecer la propiedad Formulario de inicio de la base de datos y quitar o cambiar el nombre de la macro AutoExec antes de intentar llamar a ExportAccessDatabase.
  5. Si desea automatizar aún más este proceso, puede escribir una función que, dada la ruta de acceso a una carpeta, enumera todas las bases de datos de la carpeta y llama a la función ExportAccessDatabase para exportar cada base de datos de Microsoft Access a una carpeta de destino.

Exportar código de base de datos (VBA)

Option Compare Database
Option Explicit

' Pass in the location of the database to export, and the folder to export to
Sub ExportAccessDatabase(strDBPath As String, exportFolder As String)
    Dim objAccess As Object
    Dim db As Database
    Dim td As TableDef
    Dim qd As QueryDef
    Dim doc As Document
    Dim cont As Container

    On Error GoTo Err_ExportDatabase
    
    ' Create a new instance of Access
    Set objAccess = CreateObject("Access.Application")

    ' Open the database
    objAccess.OpenCurrentDatabase strDBPath
    
    ' Create a new folder using the name of the database to hold all the exported objects if it does not already exist
    exportFolder = exportFolder & Mid(strDBPath, InStrRev(strDBPath, "\"), InStr(strDBPath, ".") - InStrRev(strDBPath, "\")) & "\"
    
    If Dir(exportFolder, vbDirectory) = "" Then
        MkDir exportFolder
    End If

    Set db = objAccess.CurrentDb()

    ' Export all objects to export location with a name based on the type and name of the object

    ' Export Tables
    For Each td In db.TableDefs
        If Left(td.Name, 4) <> "MSys" Then ' Skip Microsoft Access system tables
            objAccess.DoCmd.TransferText acExportDelim, , td.Name, exportFolder & "Table_" & td.Name & ".txt", True
        End If
    Next td

    ' Export Forms
    For Each doc In db.Containers("Forms").Documents
        objAccess.SaveAsText acForm, doc.Name, exportFolder & "Form_" & doc.Name & ".txt"
    Next doc

    ' Export Reports
    For Each doc In db.Containers("Reports").Documents
        objAccess.SaveAsText acReport, doc.Name, exportFolder & "Report_" & doc.Name & ".txt"
    Next doc

    ' Export Macros
    For Each doc In db.Containers("Scripts").Documents
        objAccess.SaveAsText acMacro, doc.Name, exportFolder & "Macro_" & doc.Name & ".txt"
    Next doc

    ' Export Modules
    For Each doc In db.Containers("Modules").Documents
        objAccess.SaveAsText acModule, doc.Name, exportFolder & "Module_" & doc.Name & ".txt"
    Next doc

    ' Export Queries
    For Each qd In db.QueryDefs
        ' Skip Microsoft Access temporary queries
        If Left(qd.Name, 3) <> "~sq" Then
            objAccess.SaveAsText acQuery, qd.Name, exportFolder & "Query_" & qd.Name & ".txt"
        End If
    Next

    objAccess.Quit

    Set db = Nothing
    Set cont = Nothing
    Set objAccess = Nothing

    MsgBox "Export complete to " & exportFolder, vbInformation
    
GoTo Exit_Sub

Err_ExportDatabase:
    MsgBox Err.Number & ": " & Err.Description
 
Exit_Sub:
End Sub