Access多层架构入门一- CurrentProject与CodeProject的区别
当使用Access开发中大型应用系统时,就必须要将一个数据库文件(mdb或accdb)拆开成2层或多层的结构,特别是类似MRP,ERP这种大型的项目,一个数据库文件里的对象和窗体 模块等就可能超1000个,有时会达到几千个甚至 上万,这时,多层架构势在必行。
但要实现多层架构,就必须先了解CurrentProject与CodeProject的区别, 像我们的Access通用开发平台,就是使用2层架构,而我们开发的Access MRP ,Access ERP,就是使用多层架构。
今天我们就来先讲一下多层架构的入门篇
'===============================================================----Access中国-------
'-技巧名称: CurrentProject与CodeProject的区别
'-技巧描述: CurrentProject与CodeProject的区别
'-相关引用:
'-使用注意:
'-兼 容 性: 97,2000,XP 2003 compatible
'-参考资料:
'-作 者: 王宇虹(tmtony) 修改:王宇虹(tmtony) tmtony@21cn.com
'-创建日期: 2004-06-21 更新日期:
'-技巧来源: Access中国/Office中国 bbs.office-cn.net
'====================================================================================
'Access中国/Office中国版权所有 http://www.office-cn.net 摘录请保留上面版权申明
'====================================================================================
问题简述:
好像CurrentProject与CodeProject的功能很类似, 没有什么区别,那为什么要设置两个对像呢?
解决办法:
“CurrentProject 对象引用了当前 Microsoft Access 项目(.adp)或 Access 数据库(.mdb)的项目。CurrentProject 对象具有几个集合,其中包含了当前数据库中的特定 AccessObject 对象。”
“CodeProject 对象引用一个 Microsoft Access 项目(.adp)或 Access 数据库(.mdb)的代码数据库的项目。CodeProject 对象具有几个集合,其中包含了代码数据库中的特定 AccessObject 对象。”
CurrentProject是指当前的数据库或项目,
CodeProject则是指当前的代码数据库或项目,是指代码所在的数据库或项目。
举个例子:
例如两个MDB,tmtony.mdb引用了tmtony1.mdb, 如果tmtony1.mdb有个公共函数FuncTest
那么运行tmtony.mdb时, FuncTest的CurrentProject就是tmtony.mdb 而CodeProject就是tmtony1.mdb
做了个实例:
如果没有引用到,请手工引用
运行tmtony.mdb 点击测试即可看到效果
专家点评:
这种方法能够实现多层MDE引用,大大加强大的应用系统分模块组合开发的情况,可将各个功能分散到各个MDE,然后各个MDE再组合一个更强大的系统,由主程序统一调用.我们现在的ERP系统就是使用这种方法来搭建起来的. v6ot4JLJ.rar (36.59 KB, 下载次数: 8)
官方的解释
“CurrentProject 对象引用了当前 Microsoft Access 项目(.adp)或 Access 数据库(.mdb)的项目。CurrentProject 对象具有几个集合,其中包含了当前数据库中的特定 AccessObject 对象。”
“CodeProject 对象引用一个 Microsoft Access 项目(.adp)或 Access 数据库(.mdb)的代码数据库的项目。CodeProject 对象具有几个集合,其中包含了代码数据库中的特定 AccessObject 对象。”
从这两句比较:CurrentProject是指当前数据库或项目,而CodeProject则是指代码数据库。代码数据库应是指对数据库进行拆分后包含代码的那一部份。
我们的示例文件解释:
从字面上理解:
CurrentProject 应该是指当前工程(最上面一层的工程)
CodeProject 应该是指代码工程(即引用的MDE它代码所在的工程)
示例里面包含两个MDB
tmtony.mdb引用了tmtony1.mdb, 如果没有引用到,请手工引用
运行tmtony.mdb 点击测试即可看到效果
如果1.mdb这个窗体与2.mdb中的窗体不重名的话,可直接使用
docmd.openform "此窗体名"
如果重名的话,需要先在1.mdb建立一个公共函数叫 myOpenform(rstrFormName as string)
内容为 docmd.openform rstrFormName
然后在2.mdb要打开此窗体,就使用
myOpenform "此窗体名"
这是我研究很久才无意想到的办法,非常管用.
1.mdb中的对象与2.mdb中对象的关系非常有意思,我已经研究了近三年,但发现还有不少功能待发掘,实现出来的效果很有模块化 或类似vfp中的类继承之类的味道.
http://www.office-cn.net/t/pro/index.html?accesstop.htm