Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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 для использования. Хотя, это отличный ресурс для уменьшения размера и ускорения вашего кода, декомпиляция может вызвать массу проблем в многопользовательской среде.