微软中国社区

来源:百度文库 编辑:神马文学网 时间:2024/04/28 06:48:49
能否修改MDE文件窗体和报表的属性
王宇虹
能否修改MDE文件窗体和报表的属性
作者:tmtony(王宇虹) (http://www.office-cn.net)
日期:2005年2月
适用版本:Access 2000、Access 2002、Access 2003
难度系数:*****
问题详述
MDB生成MDE之后是否真的无法再修改窗体和报表的属性?有时一些早期的程序已经无法再找到源代码,但用户却要求修改窗体和报表的外观或调整控件的位置,有没有办法实现?
专家解答
在前面问题讲过,将 Access数据库保存为MDE将禁止用户在“设计”视图中查看、修改窗体、报表,不过,如果程序员未将窗体的“允许设计更改”属性设置为“仅设计视图”,则可以在窗体上单击右键,选择“属性”命令,就可查看窗体及控件上的属性值。不过,这些属性却无法修改。而对于报表,则甚至连“允许设计更改”这个属性都没有,那到底有没有办法来修改MDE中窗体和报表的属性呢?
实际上有一种方法可以间接修改窗体和报表,操作方法如下。
创建一个MDB文件,在MDB中创建一个tblEmployee的表,并创建一个窗体frmTest和一个报表frmTest绑定到表tblEmployee。设置相应的控件及属性,在这里设置窗体的标题为空,“移动电话”文本框绑定到“移动电话”字段,然后将MDB编译成MDE。MDE中窗体和报表运行结果如图15-1和图15-2所示。

图15-1 MDE中窗体的运行效果

图15-2 MDE中报表的运行效果
按住Shift键打开MDE文件,显示数据库窗口,选择frmTest窗体后,可发现“设计”按钮变为灰色,不可使用。至此,可以试用以下步骤。
(1)打开窗体frmTest 。
(2)使用【Alt+F11】组合键进入VBA代码编辑器。
(3)按下设计模式 键。
(4)窗体会进入设计视图。
(5)在窗体上修改“移动电话”标签及文本框的属性,将标签标题改为“传真”,将文本框的“控件来源”属性改为“传真”,再将窗体的标题改为“员工资料”。几乎任何属性和格式均可修可,可改变控件位置,可改变绑定的数据库。除了代码,几乎所有事情均可实现。
(6)然后单击“保存”按钮,关闭窗体,再重新打开窗体,可发现所有改动已经保存。
使用同样的方法,修改报表的“移动电话”文本框绑定到“传真”字段。修改窗体和报表后的运行结果如图15-3、图15-4所示。

图15-3 修改后MDE中窗体的运行效果

图15-4 修改后MDE中报表的运行效果
也可使用复制粘贴操作将整个窗体的内容复制到一个新的MDB文件的窗体中,这样,就可间接将整个MDE的内容复制出来。复制出来的窗体和报表与原窗体和报表基本一致。通过这种方法实际上是变相地破解了MDE中的窗体和报表。当然,MDE中窗体和报表的VBA代码还是无法反编译。
使用上述方法的注意事项:
(1)不能在Access 97使用,因为Access 97根本没有“设计模式”按钮。
(2)除了使用【Alt+F11】快捷键进入之外,还可使用【Ctr+G】快捷键进入调试窗口从而间接进入VBA代码编辑器。
(3)虽然可以禁止系统的一些特殊键来避免用户进入VBA代码编辑器,但即使是编译成MDE,启动里的特殊键的设置也可通过程序代码来解除。即通过代码打开MDE文件,然后修改启动里的属性,设置允许使用特殊键,然后通过特殊键来进入数据库窗口和VBA编辑器。
(4)如果MDB无法使用【Alt+F11】和【Ctr+G】两个快捷键进入,则可先选择“模块”对象中的空白处,单击鼠标右键,在弹出的快键菜单中选择“Visual Basic 编辑器”命令,不要关闭它,切换到窗体对象,打开需要修改的窗体,再切换到VBA编辑器,单击“调试模式”就可以了。
(5)如果程序限制了特殊键,还可在窗体任何位置单击鼠标右键,在快捷菜单中选择“属性”命令,再选择任何事件属件,双击打开事件生成器,再进入VBA编辑器,虽然也会提示“工程不可查看”,但的确已经进入VBA编辑器的状态。
专家点评
上述方法不受窗体的“允许设计更改”属性设置的影响,也就是说,即使将窗体的“允许设计更改”属性设置为“仅设计视图”,上述方法仍然适用。还需注意的是,在修改窗体、报表或控件的属性之后,必须单击“保存”按钮显式保存,修改内容才能真正保存在MDE中,否则将会丢失所有的修改内容。因为在关闭窗体或报表时,即使对窗体或报表修改了内容,系统也不会提示是否保存。
除了标准控件之外,在MDE中窗体中还可插入新的图表控件和ActiveX控件,并可增删窗体页眉、窗体页脚。不过,如果删除了程序代码引用到了的控件,则会导致代码执行出错。
在上述情况中,还可以使用“表达式生成器”,“宏生成器”,不过“代码生成器”则失效了。
摘自 Office中国《专家门诊——Access开发答疑200问》一书第16章