下面的内容可能对你有用:(转载大富翁论坛)
一、 基础知识
Delphi Multi-tier程序多以MIDAS为基础,因此以MIDAS为基础建立的Delphi Multi-tier程序,客户端和服务器端都要MIDAS.DLL文件的支持。
1) 远程数据模块:
远程数据模块是一个类似于COM Automation Server或是Corba Server的数据模块,它存在于应用程序服务器中,负责提供应用程序服务器上的数据提供者组件(Provider)接口给客户端应用程序使用。Delphi目前提供的远程数据模块有TRemoteDataModule、TMTSDataModule及TCORBADataMadule等三种,分述如下:
l TRemoteDataModule是一个双重接口(Dual Interface)的Automation Server,它提供DCOM、HTTP、TCP/IP(即Windows sockets)及OLEnterprise等通讯协议的客户端成苏使用。
l TMTSDataModule是一个双重接口(Dual Interface)的Automation Server,不过它以Active Library(.DLL文件类型,即COM中的In-process对象)的方式撰写应用服务程序,并将其安装在MTS(Microsoft Transaction Server)中,所以除了具有MTS的优点外,也同样可以供DCOM、HTTP、TCP/IP及OLEnterprise等通讯协议的客户端程序所使用。
l TCORBADataMadule是一个Corba Server,它允许Corba客户端应用程序的连接及数据库的存取。
2) 数据提供者组件(Data Provider):
数据提供者是存在应用程序服务器上的一个组件,负责将TdataSet中取出应用程序所要要求的数据,并进行封装提供给客户端程序。一般来说,一个远程数据模块至少应该包含一个provider组件。其主要功能有如下两点:
l 数据提供:provider组件负责从数据库中提取应用程序所需的数据及用以描述这些数据的元数据,并将其打包后提供给客户端应用程序。
l 数据解析(Resolving):provider组件从客户端获取数据,如果这些数据已被其他的应用程序修改,provider将尝试用目前的数据取代客户端应用程序所作的变更。除此之外,数据提供还会保存无法传送的纪录。
3) 客户端连接组件:
客户端连接组件通常位于客户端应用程序中,负责与应用服务器取得连接,并为客户端数据集组件(Client Dataset Component)建立一个IappServer的存取接口。Delphi 5中共有五中Connection组件,其各自功能如下表所示:
组件名称 通讯协议
TDCOMConnection DCOM
TsocketConnection TCP/IP(Windows Sockets)
TwebConnection HTTP
TCORBAConnection Corba(IIOP)
TOLEnterpriseConnection Olenterprise(RPCs)
4) 客户端数据集组件(Client Dataset Component):
该组件用于从应用服务器取得数据。它通过MIDAS.DLL来管理与组织从应用服务器上所取得的数据包。TclientDataSet与TXMLBroker都属于此类组件。
二、 以TRemoteDataModule组件作为应用程序服务器方法
步骤一、建立新项目,以此组件为服务器,必须建立EXE应用程序项目。
步骤二、建立远程数据模块(file/new…菜单项),并合理设置该模块的属性及事件。
步骤三、在上述远程数据模块中加入Data Access组件或ado data access组件(database、table、query等),并合理设置该模块的属性及事件。
步骤四、在上述远程数据模块中加入TdataSetProvier组件,并设置其Dataset属性为步骤三中缩设置的数据集。
步骤五、如需要,重复步骤四,加入另外的data provider组件。
步骤六、进一步完成程序功能,最后保存、编译上述工程。
步骤七、运行一次所生成的应用程序,完成最后的系统注册工作,如需进一步配置,运行windows提供的DCOMCNFG.EXE程序进行配置。以后该组件将在存在客户请求时自动启动,并在所有请求关闭后自动关闭。
三、 以TMTSDataModule作为应用程序服务器
步骤一、建立新工程,必须建立AVTIVE LIBRARY(即dll工程)类型的工程。
步骤二、向工程中加入MTS DataModule(file/new…菜单中),并设置其参数。
步骤三、向上述数据模块中加入data access组件或ado data access组件。
步骤四、必要时,在view/type library命令调出的窗口中进一步设置该application data server的属性和方法。例如,可以增加一个date属性,此时程序将会自动增加一个名为Get_date的函数,用户只需在此函数框架中加入代码,对Get_date进行赋值(如Get_date:=’2000年’,注意可以使用now直接取得服务器的当前时间),然后客户端的程序就可直接使用该属性了。
步骤五、进一步完善程序,保存、编译程序后使用run/install MTS Objects命令将该dll文件注册到系统中。
步骤六、用户可以利用windows的“组件服务”管理工具对所安装的dll进行进一步的配置。注意:在组件服务窗口中,所有已经被激活的服务的图标都回在不停的转动,以与未激活的dll相区别。
说明:mts方式的主要优点:
1) 可以提供基于角色的安全隔离机制,利用isCallInRole(const role:wideString)函数判断一个用户是否从属于某一个角色。
2) 数据库连接自动调度(pooling),可以转移一个不再使用的连接给另外的用户,减少连接次数,从而提供运行速度。但是应注意一定要将database的keepConnection属性关掉。
3) MTS完整的事务支持。
4) 及时激活服务其功能。
四、 以TCORBADataMoudle建立应用服务器
该种类型的服务器与客户端之间的连接必须在Delphi提供的Visibroker Smart Agent程序运行的前提下才能进行。其结构如下图所示:
BOA: Basic Object Adaptor
步骤一、建立新的项目。
步骤二、“file/new…”菜单中选取Corba DataModule。
步骤三、在上述的Data Module中加入DataAccess或ADO access数据集组件。
步骤四、在上述的DataModule中加入Data provider组件。
步骤五、进一步完善程序,保存并编译程序。
步骤六、注册服务器程序。注意有两种方式可以使用:静态(早期)连接和动态(晚期)连接。Delphi中有Interface Repository和Object Activation Deamon两个公共程序用于注册Corba应用数据服务器。使用后者程序的方法如下:
1) 使用windows程序oadutil,方法如下:
2) oadutil reg –r IDL:(Repository ID)-O (接口对象名)-cpp (应用服务程序路径名) unshared
3) oadutil unreg –r IDL:(Repository ID)-O (接口对象名)
4) 两个可选的参数是:host: 用于指定执行OAD的计算机;p: 代表每以客户端程序都对应一个特定的应用程序服务对象。
5) 注意,可以使用Delphi的VisiBroker Smart Finder程序寻找某台计算机上的CORBA应用服务器程序。
五、 以TDCOMConnection作为客户端应用程序
该方式知识用于企业内部网
步骤一、建立新项目。
步骤二、加入TDCOMConnection组件,设置其computername和ServerName属性,然后置Connected属性为true。
步骤三、加入TclientDataSet组件、DataSource组件、及DataControl中的组件。其中TclientDataSet重点设置的属性为:RemoteServer和ProviderName。
步骤四、进一步完善程序,保存并编译程序。
六、 以TSocketConnection作为客户端应用程序
该种方式使用于局域网和广域网内的通信,但是不能绕过防火墙。
该种方式还需要首先运行服务器端的socket server程序scktsrvr.exe以用于监听连接。
步骤一、建立新项目。
步骤二、加入TSocketConnection组件,设置其address属性为服务器的ip地址,ServerName属性为应用服务器server名,然后置Connected属性为true。
步骤三、加入TclientDataSet组件、DataSource组件、及DataControl中的组件。其中TclientDataSet重点设置的属性为:RemoteServer和ProviderName。
步骤四、进一步完善程序,保存并编译程序。
七、 以TwebConnetion作为客户端应用程序
该种方式使用于局域网和广域网内的通信,且能绕过防火墙。
这种方式要求将httpsrvr.dll文件复制到指定的网页服务器目录中,且设置该目录属性为可执行权限。另外客户端计算机中必须安装wininet.dll文件
步骤一、建立新项目。
步骤二、加入TwebConnetion组件,设置其url属性为服务器的url地址,ServerName属性为应用服务器server名,然后置Connected属性为true。
步骤三、加入TclientDataSet组件、DataSource组件、及DataControl中的组件。其中TclientDataSet重点设置的属性为:RemoteServer和ProviderName。
步骤四、进一步完善程序,保存并编译程序。
八、 以TCORBAConnection作为客户端应用程序
步骤一、建立新项目。
步骤二、加入TCORBAConnection组件,设置其repositoryID属性为服务器的repositoryID,hostName为服务器的ip地址,ServerName属性为应用服务器server名,然后置Connected属性为true。
步骤三、加入TclientDataSet组件、DataSource组件、及DataControl中的组件。其中TclientDataSet重点设置的属性为:RemoteServer和ProviderName。
步骤四、进一步完善程序,保存并编译程序。

解决方案 »

  1.   

    引用你建立的组件;
    unit Unit2;interfaceuses
      SysUtils, Classes, DB, DBClient, MConnect;type
      Tfiltertype=(ftnone,ftname);
      TDataModule2 = class(TDataModule)
        DCOMConnection1: TDCOMConnection;
        ClientDataSet1: TClientDataSet;
      private
        ffiltertype:Tfiltertype;
        ffilterstr:string;
        { Private declarations }
      public
      procedure nofilter;
      procedure filtername;
        { Public declarations }
      end;var
      DataModule2: TDataModule2;implementationuses Unit1;{$R *.dfm}
    procedure tdatamodule2.nofilter;
    var
      data:olevariant;
    begin
      DCOMConnection1.AppServer.query(data);
      ClientDataSet1.Refresh;
    end;
    procedure tdatamodule2.filtername;
    var
      data:olevariant;
    begin
      ffilterstr:=form1.edit1.text;
      DCOMConnection1.AppServer.come(form1.edit1.text,data);
      ClientDataSet1.Refresh;
    end;
    come,query为rmd上的接口