Как декомпилировать и перекомпилировать приложение базы данных? - PullRequest
34 голосов
/ 16 июля 2010

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

Ответы [ 7 ]

45 голосов
/ 16 июля 2010

Для декомпиляции базы данных 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.открыв любой модуль и используя команду Debug Compile [DatabaseName].

Если это то, что вы хотите делать часто, вы можете создать ярлык «Access Decompile» в вашем SendTo MГумилева.Если у вас есть этот ярлык в меню SendTo, вы сможете щелкнуть правой кнопкой мыши любую базу данных Access и выбрать «Отправить в -> Access Decompile», что гораздо проще, чем создать ярлык для конкретной базы данных.

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

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

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

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

    %APPDATA%\Microsoft\Windows\SendTo

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

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

Чтобы вызвать ярлык Access Decompile, щелкните правой кнопкой мыши базу данных Access в проводнике Windows и выберите «Отправить в -> Access Decompile».Не забудьте удерживать клавишу Shift, чтобы обойти любой код запуска в базе данных.

37 голосов
/ 16 июля 2010

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

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

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

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

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

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

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

  7. откройте VBE и в меню отладки, выберите COMPILE [имя проекта].

  8. в меню файла, сохраните проект.

  9. снова компактный.

Зачем нужны все эти шаги?

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

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

  1. в опциях VBE, отключите COMPILE ON DEMAND

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

  3. часто скомпилируйте с помощью этой кнопки на панели инструментов после каждых двух или трех строк кода.

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

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

9 голосов
/ 28 февраля 2014

Принятый ответ - это здорово, но несколько нецелесообразно создавать ярлыки для каждой базы данных.

Вы можете сохранить его как модуль 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"

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

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

4 голосов
/ 18 декабря 2013

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

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

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-код.

3 голосов
/ 11 марта 2018

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

Чтобы декомпилировать базу данных Access:

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

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

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

2 голосов
/ 05 февраля 2014

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

1 голос
/ 24 апреля 2019

Или просто вы можете создать ярлык на рабочем столе (с флагом / Decompile) и перетащить приложение Access, удерживая SHIFT, чтобы обойти любой код

...