У меня есть приложение Access Access, и я хотел бы знать правильный способ декомпиляции и перекомпиляции.
Как декомпилировать и перекомпилировать приложение базы данных?
Ответ 1
Принимаемый ответ отличный, но немного непрактично создавать ярлык для каждой базы данных.
Вы можете сохранить это как модуль 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 из командной строки оболочки.
Обратите внимание, что вам все равно нужно удерживать клавишу Shift при запуске, чтобы обойти запуск приложения.
Ответ 2
Чтобы декомпилировать базу данных Access, вам необходимо создать ярлык со следующими элементами:
- Путь к исполняемому MS Access (MSACESS.exe)
- Путь к базе данных, которую вы хотите декомпилировать
- Флаг/декомпилировать
Все вместе, то ярлык будет выглядеть примерно так:
"C:\Program Files\Microsoft Office\Office\MSACCESS.EXE" "C:\users\tim\documents\Mydatabase.mdb" /decompile
Очевидно, что пути будут отличаться в вашей системе.
Я бы рекомендовал сделать резервную копию вашей базы данных, прежде чем запускать эту команду.
Если у вас есть код запуска в вашей базе данных, вы должны удерживать клавишу Shift, чтобы обойти выполнение кода запуска.
Как только база данных откроется, вы можете компактно и восстановить базу данных, чтобы обеспечить оптимальную производительность.
После компактности и ремонта вы можете перекомпилировать код VBA, открыв любой модуль и используя команду Debug Compile [DatabaseName]
.
Если вы часто это делаете, вы можете создать ярлык "Access Decompile" в меню SendTo. После этого ярлыка в меню SendTo вы сможете щелкнуть правой кнопкой мыши по любой базе данных Access и выбрать "Send To → Access Decompile", что намного проще, чем создать ярлык для конкретной базы данных.
Выполните следующие действия, чтобы настроить меню "Отправить" с ярлыком "Декомпиляция доступа"
- Создайте ярлык для исполняемого файла Access.
-
Добавить флаг/декомпилировать в Target для ярлыка. Ярлык будет выглядеть следующим образом:
"C:\Program Files\Microsoft Office\Office\MSACCESS.EXE" /decompile
-
Откройте проводник Windows и вставьте следующее в адресную строку:
%APPDATA%\Microsoft\Windows\SendTo
-
Скопируйте ярлык, который вы создали в папку SendTo.
-
Теперь для использования будет доступен ярлык декомпиляции доступа.
Чтобы вызвать ярлык Access Decompile, щелкните правой кнопкой мыши по базе данных Access в проводнике Windows и выберите "Отправить в → Декомпилировать доступ". Обязательно удерживайте клавишу сдвига вниз, чтобы обойти любой код запуска в базе данных.
Ответ 3
@Практические инструкции по использованию Lentine хороши, но он не учитывает фактические шаги, необходимые для декомпиляции, которые стоит делать:
-
резервное копирование базы данных.
-
объедините свою базу данных.
-
используя ярлык, созданный с помощью инструкций Tim, откройте свою базу данных.
-
закрыть этот экземпляр Access.
-
откройте новый экземпляр Access и откройте базу данных, которую вы только что декомпилировали, но УБЕДИТЕСЬ, ЧТО ВЫ ПОПАДАЕТЕ ВСЕ КОД ЗАПУСКА (т.е. удерживайте клавишу смены). Если вы этого не сделаете, вы также можете вернуться к шагу 3 и повторите попытку, так как если код запуска будет запущен, ваш код будет перекомпилирован, прежде чем вы будете готовы сделать это.
-
компактно декомпилированная база данных (и обязательно держите клавишу сдвига так, чтобы она обходила код запуска, см. № 5).
-
откройте VBE и в меню Debug, выберите COMPILE [название проекта].
-
в меню файла, сохраните проект.
-
compact снова.
Почему все эти шаги необходимы?
Поскольку вы хотите не просто декомпилировать VBA, вы должны убедиться, что все страницы данных, на которых был скомпилирован скомпилированный p-код, полностью удалены, прежде чем перекомпилировать.
Я также рекомендую:
-
в настройках VBE, выключите COMPILE ON DEMAND
-
в VBE, добавьте кнопку COMPILE на свою панель инструментов.
-
часто компилируйте эту кнопку на панели инструментов после каждой двух или трех строк кода.
Декомпилировать - это не то, что вы должны использовать все время, но во время сверхпрочного кодирования я мог бы декомпилировать пару раз в день. И я вообще декомпилирую/перекомпилирую как последний шаг перед выпуском приложения в производство.
В конце концов, прочитайте статью Майкла Каплана по этому вопросу, чтобы лучше понять ее.
Ответ 4
Я написал VBS script для автоматизации процесса декомпиляции. Глупо, что Microsoft не интегрировала это в Access, учитывая, что это необходимо при разработке VBA-тяжелых приложений.
script находит MSACCESS.exe и запускает Access с флагом декомпилирования в базе данных, расположенной в родительском каталоге script, имя которого указано в коде.
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-код.
Ответ 5
Другие ответы здесь кажутся мне немного сложными.
Чтобы декомпилировать базу данных Access:
Откройте диалоговое окно "Выполнить" из меню "Пуск" или нажмите Win + R
Введите: MSACCESS.EXE/decompile
(правильная установка должна открыть приложение Access, вы также можете указать полный путь к MSACCESS.EXE) и нажмите OK.
Доступ теперь открывается. Откройте вашу БД в открывшемся окне Access. Это декомпилирует это.
Ответ 6
Просто хотел добавить мои два цента. Ежедневно я работаю с базами данных SQL Server, SSIS и MS Access, и наша сеть позволяет нам использовать разные настольные компьютеры Citrix; некоторые из них - Win Serv 2003 SP2, а некоторые из них - Win Serv 2008 R2. Когда вы компактны и ремонтируете MS Access dbs на одном рабочем столе, базы данных в порядке. Но когда вы декомпилируете, вы должны убедиться, что кто-то другой, использующий dbs, сможет их открыть. Проверьте все элементы управления, чтобы убедиться, что они работают одинаково с рабочей станции на рабочую станцию. Вы столкнетесь с проблемами, когда некоторая установка MS Access не будет содержать те же библиотеки. Это заставило нас запретить все разработки интерфейсов с нетрадиционными элементами управления, особенно те, которые вам нужно будет добавить к db для использования. Хотя, это отличный ресурс для уменьшения размера и ускорения вашего кода, декомпиляция может вызвать массу проблем в многопользовательской среде.