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

时间:2010-07-16 15:40:48

标签: ms-access access-vba maintenance decompiler

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

7 个答案:

答案 0 :(得分:44)

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

  1. MS Access可执行文件的路径(MSACESS.exe)
  2. 您要反编译的数据库的路径
  3. /反编译标志
  4. 然后,快捷方式将如下所示:

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

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

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

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

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

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

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

    按照以下步骤使用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 Shortcut。

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

答案 1 :(得分:36)

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

  1. 备份您的数据库。

  2. 压缩您的数据库。

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

  4. 关闭该Access实例。

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

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

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

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

  9. 再次紧凑。

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

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

    我还建议:

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

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

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

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

      最后,请阅读Michael Kaplan's article on the subject以更好地理解它。

答案 2 :(得分:9)

accepted answer很棒,但为每个数据库创建快捷方式有点不切实际。

您可以将其另存为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键以绕过应用程序启动。

答案 3 :(得分:4)

我写了一个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代码。

答案 4 :(得分:3)

这里的其他答案似乎都有点复杂我的口味。

要反编译Access数据库:

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

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

现在可以打开Access。在刚刚打开的Access窗口中打开您的数据库。这会反编译它。

答案 5 :(得分:2)

只想加我的两分钱。我每天使用SQL Server,SSIS和MS Access数据库,我们的网络允许我们使用不同的Citrix桌面;一些是Win Serv 2003 SP2,一些是Win Serv 2008 R2。在一个桌面中压缩和修复MS Access dbs时,数据库很好。但是,当你反编译时,你必须确保使用dbs的其他人能够打开它们。检查所有控件,看它们在工作站之间的工作方式是否相同。当其他人安装MS Access不包含相同的库时,您将遇到问题。这导致我们禁止使用非传统控件进行前端的所有开发,特别是那些你必须添加对db的引用才能使用的控件。虽然,这是一个很好的资源,可以减少大小并加快代码速度,但反编译可能会在多用户环境中造成大量麻烦

答案 6 :(得分:1)

或者简单地,您可以在桌面上创建快捷方式(带有/ Decompile标志),然后按住SHIFT拖放Access应用程序以绕过任何代码