Access养生保健秘笈之反编译大法
时 间:2019-06-10 23:17:03
作 者:红尘如烟 ID:10768 城市:成都
摘 要:本文讲解了如何解决使用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脚本来执行命令行。(呃,这个会不会违反了广告法……P_P)
假设数据库文件名是 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. 导出所有对象到空的新建数据库文件中
但这些就像是武术中的基本招式,运用之妙,存乎一心!水平的体现,就是看你能不能把基本招式玩出花来。
反编译主要用于解决非数据异常损坏问题。
压缩修复主要用于解决数据异常损坏,当然非数据问题最好也压缩修复一下。
如果用了前面两招,仍然有问题,那么就用导出所有对象到空的新建数据库文件中这一招。
少年,这本《懒得取名》神功中的秘传心法本公子已经传授给你了,能领悟多少,就看你的缘法了!学费十文钱,谢谢惠顾!
(喂喂喂!什么叫《懒得取名》?!叫个《九阴真经疗伤篇》之类有逼格的名字不行么!)
(哎呀!五毛特效都用不起的穷逼剧组,就不要在意那些细节了!)
最后的最后,再次强调一句:多备份!多备份!多备份!
Access软件网QQ交流群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- Access对子窗体数据进行批...(10.30)
- 最精简的组合框行来源数据快速输...(10.25)
- Access仿平台的多值选择器...(10.24)
- 【Access日期区间段查询】...(10.22)
- 【Access源码示例】VBA...(10.12)
- Access累乘示例,Acce...(10.09)
- 数值8.88,把整数8去掉,转...(10.08)
- 【Access自定义函数】一个...(09.30)
- 【Access选项卡示例】Ac...(09.09)
学习心得
最新文章
- Access判断多条明细的配方或订...(11.30)
- 如何让后台数据库在局域网共享时,且...(11.29)
- 【Access月初月末日期设置方法...(11.29)
- 【Access IIF函数嵌套示例...(11.26)
- Access快速开发平台--使用组...(11.25)
- Access快速开发平台--对上传...(11.22)
- Access快速开发平台企业版--...(11.18)
- 不会用多表联合查询,多表查询没结果...(11.16)
- 【案例分享】主键字段值含有不间断空...(11.16)
- Access快速开发平台--后台D...(11.14)