Поделиться через


Экспорт всех данных из базы данных Microsoft Access

Область применения: Access 2024, Access 2021

В этом разделе объясняется, как ИТ-администратор может экспортировать все данные и объекты из базы данных Microsoft Access в текстовые файлы, что позволяет использовать с другими средствами и поддерживает перенос данных.

Для данных, хранящихся в таблицах, данные можно экспортировать в различные другие форматы с помощью мастеров доступа, таких как Excel. См . статью Экспорт данных в Excel или текст, см. статью Экспорт данных в текстовый файл.

В следующих инструкциях показано, как экспортировать объекты с помощью кода VBA, команды метода DoCmd.TransferText для экспорта табличных данных и команды Application.SaveAsText для других объектов.

Предоставленный код создаст функцию, которую можно вызвать с полным путем к базе данных и целевой папке. Затем он создаст текстовый файл для каждого объекта в базе данных, который будет содержать данные из таблиц и определения всех созданных пользователем объектов, таких как формы или отчеты.

Так как в этом процессе используется автоматизация OLE, код также можно написать с помощью PowerShell или языка .NET, например C#. В этом примере используется VBA.

  1. Создайте новую базу данных.
  2. Создайте новый модуль.
  3. Скопируйте и вставьте следующий код экспортируемой базы данных в модуль.
  4. Для каждой базы данных, которую требуется экспортировать, введите следующую команду в окне интерпретации:

    ExportAccessDatabase "_Full path to database_", "_Folder to contain exported objects_"
    1. Обратите внимание, что в целевой папке будет создана новая папка с именем экспортируемой базы данных. Это позволяет экспортировать несколько баз данных в одну целевую папку, сохраняя содержимое каждой экспортируемой базы данных в отдельной папке.
    2. Если экспортируемая база данных содержит форму запуска или макрос AutoExec, действия при запуске могут помешать процессу экспорта, поэтому необходимо сбросить свойство Startup Form для базы данных, а затем удалить или переименовать макрос AutoExec перед вызовом ExportAccessDatabase.
  5. Если вы хотите автоматизировать этот процесс, можно написать функцию, которая, учитывая путь к папке, перечисляет все базы данных в папке и вызывает функцию ExportAccessDatabase для экспорта каждой базы данных Microsoft Access в целевую папку.

Экспорт кода базы данных (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