一个项目,有一个主程序,多个子模块程序(.exe),其中数据模块ADOCONNTION包含于PACKAGE中,并注册类,在主程序的登陆窗体被动态调用加载(之所以要动态调用,是基于担心远程服务器停止运行,如果在程序一开始阶段就加载就会出现问题),
进入主窗体后,多个子模块程序通过主窗体进行链接(在主程序中我可以调用EXE文件,BPL文件,DLL文件)。现在的问题是多个子模块如何共享主程序中的ADO?
我用过再次进行动态加载模块包,但这种方式好像成了多次联接ADO了?而不是共享另:李维的那篇《PACKAGE的威力》带有一些欺骗性,在那篇文章中的模块包他已加入两个数据控件,而且是ACTIVE为TRUE,也就是说在另一子窗体打开时他的数据已经存在了。所以打开的时间非常短。但问题是我们只能调用全部同类控件中的一个,而在实际中项目我们不只是用几个ADOQUERY,DATASET。有些头晕。20分为见面分,解决问题给多一百分,不够再加。

解决方案 »

  1.   

    我只知道 DLL 中的数据可以共享,其它的方面就不是很清楚了。但是共享 DataSet 的道理是一样的。
       但是为什么一定要用这种方法来实现吗?
      

  2.   

    可以试试把数据库连接写成COM方式,又主程序激活COM,在COM中实现数据库的连接
      

  3.   

    这个问题看你这么想了。
    实际上有两种解决方式,不过各有优缺点。
    1)数据库连接池。也就是说,你的各子模块不需要共享你那一个ADO连接。而是个子模块各自管理各自的数据库连接 -- 需要时建立,用完后释放。目前大多数WEB系统都采用这种模式。对于连接的速度问题,是采用池来解决。
       这种方式的好处时,各模块各自独立,基本没有偶合性。对象化程度非常高。缺点是:有重复劳动在里面。比如反复的要写建立、释放连接的代码。所以一般会先写好共享代码。
    2)接口方式。类似与你现在写的方式。数据库访问代码写在一个连接库里,各模块访问该连接库时,不是直接和连接库的控件打交道,而是访问其对外的接口,如定义一个CLASS,向外输出数据。常见的比如ADO组件,就是对用户屏蔽了数据访问底层信息,你只要访问其接口就可以获得数据了。缺点是:有一定技术难度。
      偶目前一般采用第二种。不过近期发现第一种也是很不错的模式,特别是在分布式环境下。^_^。
      总言而之,不关哪种方法,我认为你在库里面暴露ADOCONNECTION控件给给子模块访问的设计是不正确的。
      

  4.   

    谢谢回复。这个问题我已解决。实际是我没有仔细看李维的那篇文章。
    致: foxnt(天马幻想)
    像第一种方式:实际上我认为速度将会很慢,而且是重复的联接;没有达到共享的目的;
    你说在库里面暴露ADOCONNECTION控件给给子模块访问的设计是不正确的,能不能具体一点,谢谢。