Как преобразовать ADP в ACCDB с помощью Access 2013?

Access 2013 не поддерживает ADP. Приведены некоторые альтернативы ADP:

  • Преобразуйте ADP в связанную базу данных Access Desktop.
  • Импортируйте объекты в файл ACCDE, а затем создайте связанные таблицы с существующими данными с помощью более ранней версии Access.

Мой ADP содержит только формы, отчеты, макросы и модули. Я хочу использовать этот ADP в Access 2013 (не в более ранних версиях Access).

Я не нашел способа преобразовать ADP в связанную базу данных Access Desktop или импортировать объекты в файл ACCDE в Access 2013.

Как преобразовать ADP в связанную базу данных Access Desktop или импортировать объекты в файл ACCDE с помощью Access 2013?


person A_kumar    schedule 06.11.2013    source источник
comment
ADP все еще существует в Access 2013, я нашел эту ссылку: joakimdalby.dk/HTM/ADPX.htm   -  person user4007575    schedule 08.09.2014
comment
Может, ты еще нашел для меня что-то вроде 199 долларов?   -  person Arman Hayots    schedule 29.01.2016


Ответы (2)


Как преобразовать ADP в связанную базу данных Access Desktop или импортировать объекты в файл ACCDE с помощью Access 2013?

Вы не можете. Access 2013 не будет работать с файлами ADP вообще. Если вы попытаетесь импортировать объекты из файла ADP в Access 2013, вы получите следующую ошибку:

Проекты данных Access больше не поддерживаются в этой версии Access.

Что вам нужно сделать, это

  • найти машину с Access 2010 или более ранней версии,
  • используйте его для импорта запросов, форм и т. д. из ADP в файл .accdb или .mdb, затем
  • возьмите этот .accdb или .mdb файл обратно на свой компьютер с Access 2013 и продолжайте оттуда.

редактировать re: комментарии

Нет возможности преобразовать ADP в связанную базу данных рабочего стола Access с помощью Access 2013?

Очевидно нет. Даже попытка использовать VBA для копирования объекта формы из файла .adp в файл .accdb терпит неудачу. Следующий код:

Option Compare Database
Option Explicit

Sub adpImportTest()
    Dim dbPath As String, formName As String
    On Error GoTo adpImportTest_Error

    Debug.Print "Try importing a form from an .accdb file..."
    dbPath = "C:\Users\Gord\Documents\accdbTest.accdb"
    formName = "myCustomers"
    DoCmd.TransferDatabase acImport, "Microsoft Access", dbPath, acForm, formName, formName
    Debug.Print "Import succeeded."

    Debug.Print
    Debug.Print "Try importing a form from an .adp file..."
    dbPath = "C:\Users\Gord\Documents\NorthwindCS.adp"
    formName = "Customers"
    DoCmd.TransferDatabase acImport, "Microsoft Access", dbPath, acForm, formName, formName
    Debug.Print "Import succeeded."

    Exit Sub
adpImportTest_Error:
    Debug.Print Err.Description
End Sub

... дает следующий результат:

Try importing a form from an .accdb file...
Import succeeded.

Try importing a form from an .adp file...
The search key was not found in any record.

Если мы попытаемся украдкой переименовать файл .adp в .mdb, Access 2013 не прочитает его:

Нераспознанный формат базы данных

Как я уже сказал, вам нужно использовать Access 2010 (или более раннюю версию) для извлечения объектов из файла .adp в файл .accdb или .mdb. Затем вы можете работать с файлом .accdb или .mdb в Access 2013.

person Gord Thompson    schedule 06.11.2013
comment
Спасибо Томпсону за ответ. Тогда что означают альтернативы ADP: преобразовать ADP в связанную базу данных Access Desktop. Импортируйте объекты в файл ACCDE, а затем создайте связанные таблицы с существующими данными с помощью более ранней версии Access. - person A_kumar; 07.11.2013
comment
Привет Томпсон. Нет ли способа преобразовать ADP в связанную базу данных Access Desktop с помощью Access 2013. Я хочу преобразовать ADP в базу данных Desktop, а затем импортировать в свою основную базу данных. Или Могу ли я программно читать отчеты форм ADP и т. Д., А затем вставлять в моя основная база данных с использованием ADO, если возможно, скажите мне, пожалуйста. - person A_kumar; 07.11.2013

Использование office ‹2013 например, 2010 2007

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

Неполный и неочищенный код, но дает представление

модуль LoadSaveForm:

Option Compare Database
Option Base 0
Option Explicit

Dim path$
Dim DateTimeString$
Dim app As Access.Application



Function SaveFormAsText(FormName As String) As Boolean
  Dim sPath As String
  Access.SaveAsText acForm, FormName, "C:\Temp" & "\" & FormName & ".txt"
End Function

Function LoadFormFromText(FormName As String)
  Access.LoadFromText acForm, FormName, "C:\Temp" & "\" & FormName & ".txt"
End Function

Private Sub SaveMDBObjectsAsText()

    DateTimeString = Format(Now(), "yyyymmddhhnn")
    path = CurrentProject.path & "\" '& "AS_TEXT_" & DateTimeString & "\"

    If Dir(path) <> "" Then
        'It exists
    Else
        On Error Resume Next
        MkDir path
        On Error GoTo 0

    End If

    SaveDataAccessPagesAsText
    SaveFormsAsText
    SaveReportsAsText
    SaveModulesAsText
    'SaveQueriesAsText
    CreateProjectFromText (path)

End Sub


Public Sub CreateProjectFromText(pathString As String)
    path = pathString
    'SaveMDBBase
    SaveAccdbDBase
    LoadDataAccessPagesFromText
    LoadFormsFromText
    LoadReportsFromText
    LoadModulesFromText
    'LoadQueriesFromText
    On Error Resume Next
    Dim r As Reference
    With app
        With .CurrentProject
            path = .FullName
        End With

        For Each r In .References
            With r
                If Not .BuiltIn Then
                    app.References.Remove r
                End If
            End With
        Next r

        For Each r In References
            With r
                If Not .BuiltIn Then
                    app.References.AddFromGuid r.GUID, r.Major, r.Minor
                End If
            End With
        Next r
        .RunCommand acCmdSaveAllModules
        .RunCommand acCmdCompileAndSaveAllModules
        .CloseCurrentDatabase
        .SysCmd 603, path, Replace(Replace(Replace(path, ".accdb", ".accde"), ".adp", ".ade"), ".mdb", ".mde")
        .Quit
    End With
    Set app = Nothing
    MsgBox "All Done with Text Backup"

End Sub

Private Sub SaveDataAccessPagesAsText()
    Dim filename$
    Dim Name$
    Dim DataAccessPage As AccessObject
    For Each DataAccessPage In CurrentProject.AllDataAccessPages
        Name = DataAccessPage.Name
        filename = path & Name & ".txt"
        SaveAsText acDataAccessPage, Name, filename
    Next DataAccessPage
End Sub

Private Sub SaveFormsAsText()
    Dim filename$
    Dim Name$
    Dim Form As AccessObject
    For Each Form In CurrentProject.AllForms
        Name = Form.Name
        filename = path & Name & ".txt"
        SaveAsText acForm, Name, filename
    Next Form
End Sub

Private Sub SaveReportsAsText()
    Dim filename$
    Dim Name$
    Dim Report As AccessObject
    For Each Report In CurrentProject.AllReports
        Name = Report.Name
        filename = path & Name & ".txt"
        SaveAsText acReport, Name, filename
    Next Report
End Sub

Private Sub SaveMacrosAsText()
    Dim filename$
    Dim Name$
    Dim Macro As AccessObject
    For Each Macro In CurrentProject.AllMacros
        Name = Macro.Name
        filename = path & Name & ".txt"
        SaveAsText acMacro, Name, filename
    Next Macro
End Sub

Private Sub SaveModulesAsText()
    Dim filename$
    Dim Name$
    Dim Module As AccessObject
    For Each Module In CurrentProject.AllModules
        Name = Module.Name
        filename = path & Name & ".txt"
        SaveAsText acModule, Name, filename
    Next Module
End Sub

Private Sub SaveQueriesAsText()
    Dim filename$
    Dim Name$
    Dim GetQueryNames As ADODB.Recordset
    Set GetQueryNames = CurrentProject.connection.OpenSchema(adSchemaViews)
    With GetQueryNames
        Do While Not .EOF
            Name = .Fields("TABLE_NAME")
            filename = path & Name & ".txt"
            SaveAsText acQuery, Name, filename
            .MoveNext
        Loop
    End With
End Sub

Private Function SaveAccdbDBase() As Database
    Dim ws As DAO.Workspace
    Dim db As DAO.Database

    'Get default Workspace
    Set ws = DBEngine.Workspaces(0)

    Dim filename$
    Dim Name$
    Name = Replace(CurrentProject.Name, CurrentProject.path, "")
    If Name Like "*.adp" Then
        Name = Replace(Name, "adp", "accdb")
    Else
        Name = Replace(Name, "accdb", "adp")
  End If
    filename = path & Name
 'Make sure there isn't already a file with the name of the new database
   If Dir(filename) <> "" Then Kill filename

   Set app = CreateObject("Access.Application")
   'Create a new mdb file
   If Name Like "*.adp" Then
        Application.CreateAccessProject filename, getConnection.ConnectionString
    Else
    Set db = ws.CreateDatabase(filename, dbLangGeneral)
    End If
   db.Close
   Set db = Nothing
    'SaveAsText 6, "", filename
    If Name Like "*.adp" Then

        app.Visible = True
        app.UserControl = True
        app.OpenAccessProject filename
    Else
        app.OpenCurrentDatabase filename
    End If
    app.SetOption "Show Navigation Pane Search Bar", True
    Set SaveAccdbDBase = db
End Function

Private Sub LoadDataAccessPagesFromText()
    Dim filename$
    Dim Name$
    Dim DataAccessPage As AccessObject
    For Each DataAccessPage In CurrentProject.AllDataAccessPages
        Name = DataAccessPage.Name
        filename = path & Name & ".txt"
        app.LoadFromText acDataAccessPage, Name, filename
    Next DataAccessPage
End Sub

Private Sub LoadFormsFromText()
    Dim filename$
    Dim Name$
    Dim Form As AccessObject
    For Each Form In CurrentProject.AllForms
        Name = Form.Name
        filename = path & Name & ".txt"
        On Error Resume Next
        app.LoadFromText acForm, Name, filename
    Next Form
End Sub

Sub CreateNewMDBFile()

   Dim ws As Workspace
   Dim db As Database
   Dim LFilename As String

   'Get default Workspace
   Set ws = DBEngine.Workspaces(0)

   'Path and file name for new mdb file
   LFilename = "c:\NewDB.mdb"

   'Make sure there isn't already a file with the name of the new database
   If Dir(LFilename) <> "" Then Kill LFilename

   'Create a new mdb file
   Set db = ws.CreateDatabase(LFilename, dbLangGeneral)

   'For lookup tables, export both table definition and data to new mdb file
   DoCmd.TransferDatabase acExport, "Microsoft Access", LFilename, acTable, "Lookup Table1", "Lookup Table1", False

   'For data entry tables, export only table definition to new mdb file
   DoCmd.TransferDatabase acExport, "Microsoft Access", LFilename, acTable, "DataEntry Table1", "DataEntry Table1", True

   db.Close
   Set db = Nothing

End Sub

Запустите SaveMDBObjectsAsText (), чтобы понять, что происходит.

person user3675542    schedule 07.04.2015
comment
есть более полная реализация этого на github.com/timabell/msaccess-vcs-integration - person Tim Abell; 17.08.2015