l--*_*''' 35 ms-access maintenance access-vba decompiler
我有一个Access数据库应用程序,我想知道反编译和重新编译它的正确方法.
Tim*_*ine 48
要反编译Access数据库,您需要使用以下元素创建快捷方式:
总而言之,快捷方式看起来如下所示:
"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快捷方式自定义"发送到"菜单
在Target中为快捷方式附加/ decompile标志.快捷方式如下所示:
"C:\Program Files\Microsoft Office\Office\MSACCESS.EXE" /decompile
打开Windows资源管理器并将以下内容粘贴到地址栏中:
%APPDATA%\Microsoft\Windows\SendTo
将您创建的快捷方式复制到SendTo文件夹中.
现在可以使用Access Decompile Shortcut.
要调用Access Decompile快捷方式,请在Windows资源管理器中右键单击Access Database,然后选择"Send To - > Access Decompile".确保按住shift键以绕过数据库中的任何启动代码.
Dav*_*ton 37
@Tim Lentine的实用说明很好,但他遗漏了反编译所需的实际步骤:
备份你的数据库.
压缩你的数据库.
使用Tim的说明创建的快捷方式,打开您的数据库.
关闭该Access实例.
打开一个新的Access实例并打开你刚刚反编译的数据库,但是请确保你通过所有启动代码(即按住shift键).如果你不这样做,那么你也可以回到第3步并再试一次,因为如果启动代码运行,你的代码将在你准备好之前重新编译.
压缩反编译数据库(并确保按住shift键以便绕过启动代码;请参阅#5).
打开VBE并在Debug菜单上选择COMPILE [project of project].
在文件菜单上,保存项目.
紧凑.
为什么所有这些步骤都必要?
因为您不想只反编译VBA,所以您需要确保在重新编译之前完全丢弃存储已编译p代码的所有数据页.
我还建议:
在VBE选项中,关闭COMPILE ON DEMAND
在VBE中,将COMPILE按钮添加到工具栏.
在每两到三行代码之后,经常使用工具栏上的那个按钮进行编译.
反编译不是你应该一直使用的东西,但在重载编码期间,我可能每天做几次反编译.在将应用程序发布到生产用途之前,我通常会反编译/重新编译作为最后一步.
最后,阅读迈克尔卡普兰关于这个主题的文章,以便更好地理解它.
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键以绕过应用程序启动.
我写了一个 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 代码。
这里的其他答案在我看来都有些复杂。
要反编译 Access 数据库:
从开始菜单打开运行对话框,或点击Win+R
输入:(MSACCESS.EXE /decompile正确安装应打开 Access 应用程序,您还可以提供 MSACCESS.EXE 的完整路径),然后按 OK。
访问现在打开。在刚刚打开的 Access 窗口中打开您的数据库。那将反编译它。