用Delphi创建COM+ 应用服务器()

一、创建实体对象

步骤一:

ew->Other->ActiveX->ActiveX Library

如图:

 

    

 

步骤二:

New->Other->Multitier->Transactional Data Module

如图:

    

步骤三:

   选择Ok 以后会弹出如下对话框:

    

此时你需要做的是:

CoClass Name 项输入组件的名字,

Threading Model项为组件的线程模型,一般系统默认即可。

Transaction Model 项为组件的事务模型。在实体组件中一般选支持事务,即:Support Transactions

例如:

    

步骤四:

   接着在Transctional Data Module 里拖放一个DataSetProvider

如下:

    

  

DataSetProvider的作用是为客户端提供数据。而把客户端的数据传到应用服务器则用olevariant这个数据类型。

AdoconnectionAdoquery 等数据访问组件会由一个专门的数据访问类来管理。

步骤五:

  需要在数据模块的几个事件里对DataSetProviderDataSet属性做初始化: 

    

OnActivate事件:

FExample.FAccess.FADOConnection.Open;

OnCreate事件:

FExample:=TExample.Create(self);

FExample.Faccess.SQL:='SELECT TOP 100 * FROM Country';

FExample.Faccess.Query;

Datasetprovider1.DataSet:=FQuote.Faccess.ADOQuery;

OnDeactivate 事件:

FExample.FAccess.FADOConnection.Close;

OnDestroy 事件:

FExample.Free;

用Delphi创建COM+ 应用服务器()

步骤六:

接着在类型编辑器中声明组件的接口方法,如图:

        

      

方法的参数在右边的编辑框中定义:

   

刷新后,系统自动会在单元文件中产生方法的代码框架:

就有上面的update方法的框架,Example是你自己定义的业务类。

步骤七:

   接下来就要把组件安装到系统中,在Run菜单下有个 install com+ objects 选项。

    

       

   弹出一对话框:

     

勾选要安装的组件,选择套件或者新建一个套件。如下:

.选择已有的套件名称:

   

.新建套件:

     

点击Ok后系统就会把你的组件安装到组件服务里了。

(组件服务是win2K管理工具)

     

这样一个简单的组件就完成了。

用Delphi创建COM+ 应用服务器()

前面讲了建立com+组件的基本过程,但是还有许多的问题等待着大家去摸索,去发现。在这里我只实现数据库的基本操作,比如:插入,删除,更新,简单查询等等。但愿能起个引导如何实做COM+服务器的作用。基本理论知识这方面的资料也有很多,我建议大家有机会看看李维先生著作的两本书:《Delphi 5.x ADO/MTS/COM+ 高级程序设计篇》和《Delphi 5.x 分布式多层应用 系统篇》。

问题:

1、客户端与应用层是怎么传送数据的呢?

2、简单数据以及数据记录集传送有什么区别吗?

3、在应用服务器层又怎么解析传送的数据呢?

4、应用服务器是怎么跟后台数据库连接的呢?

。。。。。。

一、系统框架:

 

二、各层主要的功能:

1、客户端:

         主要是界面上处理,同时调用中间层的组件接口方法。在这里有一个窗体基类,派生了一个明细窗体基类

完成通用操作以后,在下面的具体子类中只要调用不同的接口方法即可。

各个窗体的代码看起来很相似。熟了以后,你只要会复制、粘贴操作就行了。(到了这时我会觉得很无趣,不知道大家这么想)

附:

  

 

2、      查询组件:

         接收到客户端的一些查询条件,通过业务组件里的数据提供者得到数

据以后,返回给客户端。具体代码如下:

3、      更新组件: 完成对插入,删除,更新等数据操作的接口方法。

4、业务组件:

    主要是管理实体与数据表之间的映射关系。(实体基类略)

5、 数据访问组件:

主要封装了一些数据库访问组件,及一些方法。(相关类见http://expert.csdn.net/Expert/topic/2065/2065430.xml?temp=.4066889)