打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Access秘笈之反编译大法

    本文讲解了如何解决使用Access开发的过程中,数据库文件的各种异常及损坏问题。

望闻问切:了解并收集问题现象。

大约是为了和 Office 其它组件统一,Access 有一个特色:它把所有对象和数据都放在同一个文件中。而不像其它开发工具,每个模块都是一个或多个文件。

因此当我们使用 Access 进行开发时,不可避免会对同一数据库文件进行反复修改。

但修改的次数一多,就会出现各种奇奇怪怪的问题。比如下面这些:

注意!这些只是我当前能收集到的一些具有代表性的问题,而不是前面所说的奇奇怪怪的问题的全部!

当遇到这些让你摸不着头的对话框时,实际上是 Access 在向你传达了一个不幸的消息:很遗憾,你的数据库文件出现了异常或损坏,Access 无法正常进行工作。


辨证施治:找出问题发生的原因和解决办法。

Access 数据库出现问题,最简单的办法自然就是压缩修复了,但如果是出现前面所讲的问题,压缩修复基本不能解决问题。实际上仔细观察上面的错误信息,可以粗略得出一个规律:都和修改 VBA 代码有关。

实际上对于数据对象(主要是表)的损坏,压缩修复是很有用的手段。但对于作为客户端使用的数据库文件,绝大多数奇奇怪怪的问题都是由于编译状态异常造成的,而不少初学者写代码不够仔细 ,会有一个不太好的习惯:过度依赖编译功能来排错。而过于频繁地进行编译,就会造成编译异常不断积累(VBA的编译器比较烂的)。

那么有什么办法可以消除编译状态异常呢?这就要用到一个 Access 的命令行开关: 

/decompile

最常规的用法是,按 Win+R 组合键,打开运行对话框,然后输入以下包含 /decompile 开关的命令行并回车运行:

msaccess 'D:\测试\Main.mdb' /decompile

     注意中间的文件路径名,要改成你实际的文件路径名。


疗效跟踪:为什么仍然不能修复已损坏的数据库文件?

实际上 Access 数据库文件的损坏,就和人生病一样,根据病症的的轻重程度不同,同样的治疗方法疗效也不一样。病情轻微时,可以很容易治好。而随着病情加重,就越来越难以治好了。到最后可能就变成了:癌症晚期,治不了,准备后事吧!

如果出现本文开头那些错误信息,说明文件损坏已经挺严重了!

所以,解决 Access 由于编译异常而造成的损坏,也和治病的思路一样:预防为主,治疗为辅。

但这里有一个问题,由于 Access 的单文件特性,在出现明显的错误之前,我们不知道是否存在编译异常及文件损坏;即使出现了明显的错误,有时候往往也无法判断究竟是哪个或哪几个对象的有问题。正如很多癌症早期没有任何症状,很难发现,当发现明显症状时已经是晚期了。

因此,最正确的用法是:不能把反编译当成一个出现问题之后的治疗手段,而是当成一个日常养生保健手段。

当然事无绝对,在 Access 中,我们也不是完全没有半点检查手段。这里有一个检测窗体(或其它对象)是否损坏的方法

一般来说,越复杂的对象,越容易出问题。因此在 Access 中,最容易损坏的多半是比较复杂的窗体。

我们可以先用 SaveAsText 方法将窗体另存为文本文件,再用 LoadFromText 方法将文件文件加载为窗体(自动替换已有窗体)。这2个步骤任何一个无法完成,就说明这个窗体有异常或损坏。

当然这个操作要一个一个窗体进行处理,就很繁琐,最好是要自己写一个循环代码来处理。

如果你使用盟威软件快速开发平台,那么可以打开 SysFrm_DevTool_ObjectRepair 窗体,这个是现成工具的,并且是开源的,直接使用即可。


优化改进:怎么简单方便地使用反编译命令行?

现在我们知道反编译命令的好处,也知道了应该经常性地使用它。但每次都要打开“运行”对话框,然后输入命令行,再回车打开文件,感觉好麻烦啊!怎么办?

这里本公子教大家一个进行反编译最简单方法使用VBS脚本来执行命令行。

假设数据库文件名是 Main.mdb,新建一个文本文件,然后将其重命名为“反编译打开Main.vbs”,右键点击然后在快捷菜单中选择“编辑”菜单项,用记事本打开它,打开后输入以下代码:

strName = 'Main.mdb'

strPath = CreateObject('Scripting.FileSystemObject').GetFolder('.').Path & '\'

CreateObject('WScript.Shell').Run 'MSACCESS ''' & strPath & strName & ''' /decompile'

然后我们每次打开 Main.mdb 的时候,不再直接双击Main.mdb 来打开,而是改为双击这个“反编译打开Main.vbs”的脚本文件来打开。

这样没有增加任何额外操作!是不是方便多了?


注意事项:只是为了提醒你们不要马虎!

1. 脚本中使用了相对路径,因此 vbs 脚本文件必须和 Access 数据库文件放在同一文件夹中。

2. 脚本中第1行代码指定的文件名,必须和要打开的数据库文件名相同。


复盘总结:前事不忘,后事之师。

解决 Access 的各种异常及损坏,其实无非就是三板斧,别无它法:

1. 反编译;

2. 压缩修复;

3. 导出所有对象到空的新建数据库文件中。

但这些就像是武术中的基本招式,运用之妙,存乎一心!水平的体现,就是看你能不能把基本招式玩出花来。

反编译主要用于解决非数据异常损坏问题。

压缩修复主要用于解决数据异常损坏,当然非数据问题最好也压缩修复一下。

如果用了前面两招,仍然有问题,那么就用导出所有对象到空的新建数据库文件中这一招。

最后的最后,再次强调一句:多备份!多备份!多备份!

End
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ACCESS数据库
《再论 Access 应用程序的打包》-使用 WinRAR 3.0
《理解工作组信息文件在 Access 安全性中的作用》
Access教程 第一章 Access数据库基础
给你的数据库文件减肥
如何用C# 动态创建Access数据库和表?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服