编译或反编译 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 文件有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章

Access数据库:能否编译mdb文件到exe文件?

为啥我应该关心压缩 MS Access .mdb 文件?

MS access mdb 文件第一次从 Access 2007 打开时处于“修复”状态

java直接存取MS Access的mdb数据库文件

从文本转移到 varchar(MAX):MS Access 有啥问题吗?

无法使用 OLEDB 连接 MS Access(.mdb 文件)