如何反编译和重新编译数据库应用程序?

l--*_*''' 35 ms-access maintenance access-vba decompiler

我有一个Access数据库应用程序,我想知道反编译和重新编译它的正确方法.

Tim*_*ine 48

要反编译Access数据库,您需要使用以下元素创建快捷方式:

  1. MS Access可执行文件的路径(MSACESS.exe)
  2. 要反编译的数据库的路径
  3. /反编译标志

总而言之,快捷方式看起来如下所示:

"C:\Program Files\Microsoft Office\Office\MSACCESS.EXE" "C:\users\tim\documents\Mydatabase.mdb" /decompile
Run Code Online (Sandbox Code Playgroud)

显然,您的系统上的路径会有所不同.

我建议在运行此命令之前备份数据库.

如果数据库中有任何启动代码,则应按住shift键以绕过启动代码执行.

数据库打开后,您可以压缩和修复数据库以确保最佳性能.

在压缩和修复之后,您可以通过打开任何模块并使用该Debug Compile [DatabaseName]命令来重新编译VBA代码.

如果您想经常这样做,可以在SendTo菜单中创建"Access Decompile"快捷方式.在SendTo菜单中使用此快捷方式后,您将能够右键单击任何Access数据库并选择"发送到 - >访问反编译",这比创建特定数据库的快捷方式要容易得多.

按照以下步骤使用Access Decompile快捷方式自定义"发送到"菜单

  1. 创建Access可执行文件的快捷方式.
  2. 在Tar​​get中为快捷方式附加/ decompile标志.快捷方式如下所示:

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

  3. 打开Windows资源管理器并将以下内容粘贴到地址栏中:

    %APPDATA%\Microsoft\Windows\SendTo

  4. 将您创建的快捷方式复制到SendTo文件夹中.

  5. 现在可以使用Access Decompile Shortcut.

要调用Access Decompile快捷方式,请在Windows资源管理器中右键单击Access Database,然后选择"Send To - > Access Decompile".确保按住shift键以绕过数据库中的任何启动代码.

  • 要找到MSACCESS.EXE的路径,请在控制台中运行它:`reg查询“ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ App Paths \ MSACCESS.EXE” / ve。 (2认同)

Dav*_*ton 37

@Tim Lentine的实用说明很好,但他遗漏了反编译所需的实际步骤:

  1. 备份你的数据库.

  2. 压缩你的数据库.

  3. 使用Tim的说明创建的快捷方式,打开您的数据库.

  4. 关闭该Access实例.

  5. 打开一个新的Access实例并打开你刚刚反编译的数据库,但是请确保你通过所有启动代码(即按住shift键).如果你不这样做,那么你也可以回到第3步并再试一次,因为如果启动代码运行,你的代码将在你准备好之前重新编译.

  6. 压缩反编译数据库(并确保按住shift键以便绕过启动代码;请参阅#5).

  7. 打开VBE并在Debug菜单上选择COMPILE [project of project].

  8. 在文件菜单上,保存项目.

  9. 紧凑.

为什么所有这些步骤都必要?

因为您不想只反编译VBA,所以您需要确保在重新编译之前完全丢弃存储已编译p代码的所有数据页.

我还建议:

  1. 在VBE选项中,关闭COMPILE ON DEMAND

  2. 在VBE中,将COMPILE按钮添加到工具栏.

  3. 在每两到三行代码之后,经常使用工具栏上的那个按钮进行编译.

反编译不是你应该一直使用的东西,但在重载编码期间,我可能每天做几次反编译.在将应用程序发布到生产用途之前,我通常会反编译/重新编译作为最后一步.

最后,阅读迈克尔卡普兰关于这个主题的文章,以便更好地理解它.

  • @Paul - 它不应该是必要的,因为只有数据的数据库可能不包含任何VBA代码.(顺便说一句,你必须原谅大卫没有回应;几年前他去世了.) (2认同)
  • 第6步中的括号似乎是关键。我已经从多个网站完成了所有这些步骤,并在打开时按住 Shift 键单击,最后给了我在 VBE 中进行编译的选项。 (2认同)

Rub*_*uck 10

接受的答案是伟大的,但它是一个有点不切实际的为每个数据库创建一个快捷方式.

您可以将其另存为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
}
Run Code Online (Sandbox Code Playgroud)

然后像这样称呼它:

Decompile-AccessDB -Path "C:\Path\to\some.accdb"
Run Code Online (Sandbox Code Playgroud)

这使您可以快速轻松地从power shell命令行反编译任何数据库.

请注意,在运行此按钮时仍需要按住Shift键以绕过应用程序启动.

  • 通过以下方式动态获取访问可执行文件的完整路径:`(Get-ItemProperty -Path "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\MSACCESS.EXE").'(默认)'` (2认同)

Sto*_*ckB 6

我写了一个 VBS 脚本来自动化反编译过程。考虑到在开发 VBA 密集型应用程序时这是必需的,Microsoft 没有将其集成到 Access 中是很愚蠢的。

该脚本定位 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
Run Code Online (Sandbox Code Playgroud)

只需将此文本粘贴到带有.vbs扩展名的文档中,然后双击它即可运行。Access 将启动,反编译已编译的 P 代码(“打包”代码),并自动将 VBA 源代码重新编译回 P 代码。


Eri*_*k A 5

这里的其他答案在我看来都有些复杂。

要反编译 Access 数据库:

从开始菜单打开运行对话框,或点击Win+R

输入:(MSACCESS.EXE /decompile正确安装应打开 Access 应用程序,您还可以提供 MSACCESS.EXE 的完整路径),然后按 OK。

访问现在打开。在刚刚打开的 Access 窗口中打开您的数据库。那将反编译它。