【问题标题】: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
  • 谢谢。这非常有帮助!

标签: ms-access compilation vba ms-access-2003


【解决方案1】:

VBA 被编译为intermediate language(如果我没记错的话,它叫做P-code)。你看不到它。它嵌入到文件中。

当您将 MS-Access 数据库保存为 .mde 或 .accde 时,文件中仅存在编译后的版本。没有你可以看到的代码。

AFAIK:

您的代码几乎没有状态。你干净的文本代码,它会自动编译为我们称之为op-code,它会编译为Packed code。当它运行时,它使用 VM JIT 将其即时编译为机器代码。

当您的代码被编译并且您对源代码进行更改时,您会在运行应用程序时失去编译状态,然后它会在自动编译的操作码的debug 模式下运行,直到您再次编译它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 2015-01-05
    相关资源
    最近更新 更多