编译或反编译 MS Access MDB 文件有啥作用?
Posted
技术标签:
【中文标题】编译或反编译 MS Access MDB 文件有啥作用?【英文标题】:What does compiling or decompiling an MS Access MDB file do?编译或反编译 MS Access MDB 文件有什么作用? 【发布时间】:2013-04-03 17:39:41 【问题描述】:我有一个旧的 Access 应用程序。前几天它崩溃了,并且在压缩和修复期间崩溃了。谷歌了一大堆,我终于要做的是反编译MDB,然后重新编译它,它会再次运行。
所以我的问题是,反编译 MDB 有什么作用,或者就此而言,编译 MDB 有什么作用?无论哪种方式,我都可以访问该代码,并且它在 VBA 代码编辑器中显示相同。那么它只是 MS Access MDB 内部的东西吗?
【问题讨论】:
编译从您的代码文本中创建“p-code”。 VBA 主机运行 p 代码而不是文本。 p 码存储在系统表 BLOB 中。当存储的二进制信息被破坏时,就会发生奇怪的事情。反编译会丢弃所有存储的 p 代码,无论是否损坏。然后当你再次编译时,新的干净 p 代码被存储……希望生活再次美好。经验丰富的 Access 开发人员通常建议在积极开发期间定期进行反编译作为预防措施。 反编译不是100%成功的。您可以使用未记录的Application.SaveAsText
方法将您的代码承载对象(模块、类、表单、报告)保存到文本文件中。当反编译无法恢复顺序时,在新的db文件中使用Application.LoadFromText
。
谢谢。这非常有帮助!
【参考方案1】:
VBA 被编译为intermediate language
(如果我没记错的话,它叫做P-code
)。你看不到它。它嵌入到文件中。
当您将 MS-Access 数据库保存为 .mde 或 .accde 时,文件中仅存在编译后的版本。没有你可以看到的代码。
AFAIK:
您的代码几乎没有状态。你干净的文本代码,它会自动编译为我们称之为op-code
,它会编译为Packed code
。当它运行时,它使用 VM JIT 将其即时编译为机器代码。
当您的代码被编译并且您对源代码进行更改时,您会在运行应用程序时失去编译状态,然后它会在自动编译的操作码的debug
模式下运行,直到您再次编译它。
【讨论】:
以上是关于编译或反编译 MS Access MDB 文件有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章
MS access mdb 文件第一次从 Access 2007 打开时处于“修复”状态