36

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

4

7 回答 7

51

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

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

总而言之,快捷方式将如下所示:

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

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

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

如果您的数据库中有任何启动代码,您应该按住 shift 键来绕过启动代码执行。

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

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

如果这是您想要经常做的事情,您可以在您的 SendTo 菜单中创建一个“访问反编译”快捷方式。在 SendTo 菜单中拥有此快捷方式后,您将能够右键单击任何 Access 数据库并选择“Send To --> Access Decompile”,这比创建特定数据库的快捷方式要容易得多。

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

  1. 创建 Access 可执行文件的快捷方式。

  2. 在快捷方式的目标中附加 /decompile 标志。快捷方式将如下所示:

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

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

    %APPDATA%\Microsoft\Windows\SendTo

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

  5. 现在可以使用 Access 反编译快捷方式。

要调用 Access Decompile 快捷方式,请在 Windows 资源管理器中右键单击 Access 数据库并选择“Send To --> Access Decompile”。请务必按住 shift 键以绕过数据库中的任何启动代码。

于 2010-07-16T16:11:39.233 回答
38

@Tim Lentine 的实用说明很好,但他忽略了反编译所需的实际步骤是值得做的:

  1. 备份你的数据库。

  2. 压缩你的数据库。

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

  4. 关闭该 Access 实例。

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

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

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

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

  9. 再次紧凑。

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

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

我还推荐:

  1. 在 VBE 选项中,关闭按需编译

  2. 在 VBE 中,将编译按钮添加到您的工具栏。

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

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

最后,阅读Michael Kaplan 关于该主题的文章以更好地理解它。

于 2010-07-16T19:25:35.590 回答
13

公认的答案很好,但是为每个数据库创建快捷方式有点不切实际。

您可以将其保存为 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 命令行快速轻松地反编译任何db。

请注意,当您运行此程序以绕过应用程序启动时,您仍然需要按住 Shift 键。

于 2014-02-28T18:19:53.523 回答
6

我写了一个 VBS 脚本来自动化反编译过程。微软没有将它集成到 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 代码。

于 2013-12-18T19:03:28.797 回答
5

这里的其他答案对我来说似乎都有点复杂。

反编译 Access 数据库:

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

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

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

于 2018-03-10T21:54:08.533 回答
2

只是想加我的两分钱。我每天都使用 SQL Server、SSIS 和 MS Access 数据库,我们的网络允许我们使用不同的 Citrix 桌面;有些是 Win Serv 2003 SP2,有些是基于 Win Serv 2008 R2。当您在一个桌面上压缩和修复 MS Access 数据库时,数据库很好。但是,当你反编译时,你必须确保其他使用 dbs 的人能够打开它们。检查所有控件以查看它们在工作站之间的工作方式是否相同。当其他人安装的 MS Access 不包含相同的库时,您将遇到问题。这导致我们禁止所有具有非常规控件的前端开发,特别是您必须添加对数据库的引用才能使用的前端。不过,它是减小代码大小和加快代码速度的绝佳资源,

于 2014-02-05T18:54:48.103 回答
1

或者只是您可以在桌面上创建一个快捷方式(使用 /Decompile 标志)并按住 SHIFT 拖放您的 Access 应用程序以绕过任何代码

于 2019-04-24T07:56:48.757 回答