编译或反编译MS Access MDB文件是做什么的?

3
我有一个旧版的Access应用程序。前几天它崩溃了,并在压缩和修复期间崩溃。经过大量搜索,我最终不得不对MDB进行反编译,然后重新编译它,它才能再次运行。
所以我的问题是,反编译MDB是做什么的?或者说,编译一个MDB又是做什么的?无论哪种方式,代码都可以让我访问,并且在VBA代码编辑器中看起来都一样。那么这只是MS Access MDB内部的事情吗?

1
编译将从您的代码文本创建“p-code”。 VBA主机运行p-code而不是文本。 p-code存储在系统表BLOB中。 当存储的二进制信息损坏时,会发生奇怪的事情。 反编译会丢弃所有存储的p-code,无论是否损坏。 然后,当您再次编译时,新的干净p-code被存储...希望生活再次美好。 经验丰富的Access开发人员经常建议在活动开发期间定期进行反编译作为一种预防措施。 - HansUp
2
反编译并非百分之百成功。您可以使用未记录的Application.SaveAsText方法将包含代码的对象(模块、类、表单、报表)保存为文本文件。当反编译无法恢复顺序时,可以在新的数据库文件中使用Application.LoadFromText方法。 - HansUp
谢谢。那真是非常有帮助! - nathangiesbrecht
1个回答

1
VBA被编译为中间语言(如果我没记错的话,它被称为P代码)。你看不到它。它嵌入到文件中。
当你将MS-Access数据库保存为.mde或.accde时,只有已编译的版本存在于文件中。没有你可以看到的代码。
据我所知:
你的代码有几个状态。你的干净文本代码会自动编译成我们称之为操作码,然后编译成压缩代码。当它运行时,使用VM JIT将其即时编译为机器码。
当你的代码被编译并且你对源代码进行更改时,运行应用程序时会失去编译状态,然后在自动编译的操作码的调试模式下运行,直到再次编译它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接