我有一个Access数据库应用程序,我想了解正确的反编译和重新编译它的方法。
我有一个Access数据库应用程序,我想了解正确的反编译和重新编译它的方法。
要反编译Access数据库,您需要创建一个带有以下元素的快捷方式:
所有这些元素放在一起,快捷方式看起来应该像下面这样:
"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”,这比创建特定数据库的快捷方式要容易得多。
按照以下步骤自定义Send To菜单以添加Access Decompile快捷方式:
创建指向Access可执行文件的快捷方式。
在快捷方式的目标中追加/decompile标志。快捷方式看起来像这样:
"C:\Program Files\Microsoft Office\Office\MSACCESS.EXE" /decompile
打开Windows资源管理器,并将以下内容粘贴到地址栏中:
%APPDATA%\Microsoft\Windows\SendTo
将您创建的快捷方式复制到SendTo文件夹中。
现在可以使用Access Decompile快捷方式了。
要调用Access Decompile快捷方式,请在Windows资源管理器中右键单击Access数据库,然后选择“发送到 -> Access Decompile”。一定要按住Shift键以绕过数据库中的任何启动代码。
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\MSACCESS.EXE" /ve
- Brian Burns备份数据库。
压缩数据库。
使用Tim的指南创建的快捷方式打开数据库。
关闭Access的该实例。
打开一个新的Access实例,并打开刚刚反编译的数据库,但务必绕过所有启动代码(即按住Shift键)。如果不这样做,那么你可以回到第3步重新尝试,因为如果启动代码运行,你的代码将在你准备好之前重新编译。
压缩反编译的数据库(确保按住Shift键以绕过启动代码;参见第5步)。
打开VBE,在调试菜单中选择编译[name of project]。
在文件菜单中保存项目。
再次压缩。
为什么所有这些步骤都是必要的呢?
因为你不仅想要反编译VBA,还想要确保在重新编译之前完全丢弃存储编译p-code的所有数据页面。被接受的答案很好,但为每个数据库创建快捷方式有点不切实际。
你可以将其保存为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"
(Get-ItemProperty -Path "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\MSACCESS.EXE").'(default)'
- HackSlashOption 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代码。或者,您可以在桌面上创建一个快捷方式(带有 /Decompile 标志),并按住 SHIFT 拖放您的访问应用程序以绕过任何代码。