Как декомпилировать и перекомпилировать приложение базы данных?

У меня есть приложение базы данных Access, и я хотел бы знать правильный способ его декомпиляции и перекомпиляции.

6 ответов


на принято отвечать отлично, но немного непрактично создавать ярлык для каждой базы данных.

вы можете сохранить это как модуль powershell.

#for use with MSAccess 2010

Function Decompile-AccessDB{
    param ([string]$dbFileName)

    [string]$argument = '"' + $dbFileName + '"' + "/Decompile"
    Start-Process -FilePath 'C:\Program Files (x86)\Microsoft Office\Office14\MSACCESS.EXE' -ArgumentList $argument
}

тогда назовите это так:

Decompile-AccessDB -Path "C:\Path\to\some.accdb"

Это позволяет быстро и легко декомпилировать любой db из командной строки power shell.

обратите внимание, что вам все равно нужно удерживать клавишу Shift при запуске, чтобы обойти запуск приложения.


декомпилировать базу данных Access нужно создать ярлык со следующими элементами:

  1. путь к исполняемому файлу MS Access (MSACESS.exe)
  2. путь к базе данных, которую вы хотели бы декомпилировать
  3. флаг /decompile

все вместе, тогда ярлык будет выглядеть примерно так:

"C:\Program Files\Microsoft Office\Office\MSACCESS.EXE" "C:\users\tim\documents\Mydatabase.mdb" /decompile

очевидно, что пути будут отличаться в вашей системе.

Я бы рекомендовал делать резервную копию базы данных перед выполнением этой команды.

если у вас есть какой-либо код запуска в базе данных, вы должны удерживать клавишу shift, чтобы обойти выполнение кода запуска.

после открытия базы данных вы можете компактировать и восстанавливать базу данных для обеспечения оптимальной производительности.

после компакта и ремонта вы можете перекомпилировать код VBA, открыв любой модуль и используя Access Decompile", что намного проще, чем создать ярлык для конкретной базы данных.

выполните следующие действия, чтобы настроить меню Отправить с помощью ярлыка декомпиляции доступа

  1. создать ярлык для доступа выполнимый.
  2. добавьте флаг / decompile в целевой объект для ярлыка. Ярлык будет выглядеть следующим образом:

    "C:\Program Files\Microsoft Office\Office\MSACCESS.EXE" /decompile

  3. откройте Проводник Windows и вставьте в адресную строку следующее:

    %APPDATA%\Microsoft\Windows\SendTo

  4. скопируйте созданный ярлык в папку SendTo.

  5. ярлык декомпиляции доступа теперь будет доступен для использовать.

чтобы вызвать ярлык декомпиляции доступа, щелкните правой кнопкой мыши базу данных Access в Проводнике Windows и выберите "Отправить в --> Декомпиляция доступа". Обязательно удерживайте клавишу shift, чтобы обойти любой код запуска в базе данных.


@практические инструкции Тима Лентина хороши, но он оставляет фактические шаги, необходимые для декомпиляции, чтобы сделать:

  1. резервное копирование базы данных.

  2. сжатие базы данных.

  3. используя ярлык, созданный с помощью инструкций Тима, откройте базу данных.

  4. закройте этот экземпляр Access.

  5. откройте новый экземпляр Access и откройте базу данных вы просто декомпилированы, но убедитесь, что вы обходите весь код запуска (т. е. удерживаете клавишу shift). Если вы этого не сделаете, вы можете вернуться к шагу 3 и повторить попытку, так как если запускается код запуска, ваш код будет перекомпилирован, прежде чем вы будете готовы сделать это.

  6. компактируйте декомпилированную базу данных (и убедитесь, что вы удерживаете клавишу shift, чтобы она обошла код запуска; см. #5).

  7. откройте VBE и в меню отладка выберите команду скомпилировать [название проекта.]

  8. в меню Файл Сохранить проект.

  9. опять же компактная.

Почему все эти шаги необходимы?

поскольку вы хотите не просто декомпилировать VBA, вы хотите убедиться, что все страницы данных, где был сохранен скомпилированный P-код, полностью отброшены перед повторной компиляцией.

Я также рекомендую:

  1. в настройках VBE выключите КОМПИЛИРОВАТЬ ПО ТРЕБОВАНИЮ

  2. в VBE добавьте кнопку компиляции на панель инструментов.

  3. компиляции часто с этой кнопкой на панели инструментов, после каждых двух или трех строк кода.

Декомпиляция-это не то, что вы должны использовать все время, но во время тяжелого кодирования я могу делать декомпиляцию пару раз в день. И я вообще декомпиляции/компиляции на последнем этапе перед выпуском приложения в производство использовать.

наконец, читать статья Майкла Каплана на эту тему чтобы понять это лучше.


Я написал сценарий VBS для автоматизации процесса декомпиляции. Глупо, что Microsoft не интегрировала это в Access, учитывая, что это необходимо при разработке приложений с VBA.

скрипт находит MSACCESS.exe и запускает доступ с флагом декомпиляции к базе данных, расположенной в Родительском каталоге скрипта, имя которого указано в коде.

Option Explicit
Dim MSAccPath
Dim RegKey
Dim WSHShell
Dim currentDirectory

' Get MSACCESS.exe directory
RegKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\" _
    & "CurrentVersion\App Paths\MSACCESS.EXE\Path"
Set WSHShell = WScript.CreateObject("WScript.Shell")

' Get parent directory
MSAccPath = WSHShell.RegRead(RegKey)
currentDirectory = WSHShell.CurrentDirectory

' Decompile
WSHShell.Run Chr(34) & MSAccPath & "MSACCESS.EXE" & Chr(34) & " " & Chr(34) & currentDirectory & "\..\testdb.accdb" & Chr(34) & " /decompile"

' Clear shell var
Set WSHShell = Nothing

просто вставить этот текст в документ с .vbs расширение и дважды щелкните по нему бежать. Access запустит, декомпилирует скомпилированный P-код ("упакованный" код) и автоматически перекомпилирует источник VBA обратно в P-код.


другие ответы здесь все кажутся немного сложными на мой вкус.

для декомпиляции базы данных Access:

открыть выполнить диалог из меню Пуск или нажмите Win + R

тип: MSACCESS.EXE /decompile (правильная установка должна открыть приложение Access, вы также можете предоставить полный путь к MSACCESS.EXE) и нажмите OK.

доступ теперь открывается. Откройте свою БД в только что открывшемся окне доступа. Это его декомпилирует.


просто хотел добавить свои пять копеек. Я ежедневно работаю с базами данных SQL Server, SSIS и MS Access, и наша сеть позволяет нам использовать разные настольные компьютеры Citrix; некоторые из них-Win Serv 2003 SP2, а некоторые-Win Serv 2008 R2. При сжатии и ремонт МС доступ к БД на одном рабочем столе базы данных хорошо. Но, когда вы декомпилируете, вы должны убедиться, что тот, кто еще использует dbs, сможет их открыть. Проверьте все элементы управления, чтобы увидеть, работают ли они одинаково от рабочей станции к рабочей станции. Вы будут возникать проблемы, когда чья-то установка MS Access не содержит те же библиотеки. Это приводит к тому, что мы запрещаем всю разработку интерфейсов с нетрадиционными элементами управления, особенно теми, которые вам нужно будет добавить ссылку на БД для использования. Хотя это отличный ресурс для уменьшения размера и ускорения кода, декомпиляция может вызвать массу проблем в многопользовательской среде