Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.
- Cree una nueva base de datos.
- Cree un nuevo módulo.
- Copie y pegue el siguiente código de base de datos de exportación en el módulo.
- 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_"
- 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.
- 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.
- 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