环境:

DelphiXE10.2.2+kbmMW5.02+unidac7.02+FireBird3.0

打开我们以前的例子,在from里添加以下几个控件

KbmMW-多层数据库访问服务

UniConn(TUniConnection):控件里面设置我们要访问的数据库配置;

KbmMW-多层数据库访问服务

kbmIBMD(TkbmMWInterbaseMetaData):主要是用来控制生成访问数据库SQL的具体语法的,例如不同的数据库对字段、参数、表名的表达不完全一样,这个可以根据具体数据进行定制。

KbmMW-多层数据库访问服务

InterBaseUniProvider1:用于为UniConn提供IB(FB)数据库的接口引用(USES InterBaseUniProvider),不用设置什么参数。

 

设置完上面的控件,我们进行下一步操作,点file->new->others... 出现kbmMW servicewizard。 出现

KbmMW-多层数据库访问服务

这一次,我们选择queryservice / kbmMW_1.0,然后点下一步,

KbmMW-多层数据库访问服务

选择我们要使用的数据库访问方式devart UniDac(UNIDAC),再选数据库连接池的位置,点下一步,

KbmMW-多层数据库访问服务

上图中服务名称和版本号非常重要,请一定要记下来,下面有一个控件要设置成这两个值,不然就会出错。(这点与洞主的教程也有不同)

然后一路点下去,直到最后生成代码。最后就生成一个TkbmMWqueryservice,并出现下面的界面

KbmMW-多层数据库访问服务

可以看见上面几个allowclient...是用来控制客户端访问方式的,我们今天要写一个

在客户端使用sql 语句访问服务器的例子,所以把Allowclinetstament 设为True,

同时为了客户端能够访问服务器的query,设置query属性为kbmMWUNIDACQuery1。

 

服务器界面多了两个控件:

kbmMWPooledSession:TkbmMWPooledSession;

kbmUniConnPool:TkbmMWUNIDACConnectionPool;(这个可以删除,因为我刚才自己加上去了)

KbmMW-多层数据库访问服务

kbmUniConnPool(TkbmMWUNIDACConnectionPool):是数据库访问池,它的maxconnecions提供了数据库池连接的最大值,这个值可以根据系统的资源和访问量来定,太大的话,对服务器资源要求太多,太小的话,会影响客户端访问的性能,同时cacheperformnce、MaxcacheAge、

maxCacheEntries、maxcacheRecordcount 用来控制数据库的缓冲情况,例如,如果多个客户端请求同一数据集的话,不用再到数据库里面读取,在应用服务器里面直接返回到客户端,减少数据库的读取,提高系统的访问效率,这几个参数也是要根据实际应用来选取,没有

最好的,只有最合适的。我们今天的例子,暂时都使用默认值。

 

设完后,在form 里面注册这个服务:

procedureTYRSrvAppF.FormCreate(Sender: TObject);

var

  sd:TkbmMWCustomServiceDefinition;

begin

 sd:=kbmMWServer1.RegisterService(TYRSrvSmSrvF,false); 

//下面这句注册服务,以便服务器调用

 sd:=kbmMWServer1.RegisterService(TYRSrvQSF,false);

end;

服务器端就设计好了,现在可以编译程序并运行了。

 

现在打开客户端程序,在from上添加以下几个控件,

kbmMWClientQuery1:TkbmMWClientQuery;
 kbmMWBinaryStreamFormat1: TkbmMWBinaryStreamFormat;
 DataSource1: TDataSource;

 DBGrid1:TDBGrid;

 kbmMWClientConnectionPool1: TkbmMWClientConnectionPool;

如图所示

KbmMW-多层数据库访问服务

并设置kbmMWClientQuery1的属性如下图

KbmMW-多层数据库访问服务

KbmMW-多层数据库访问服务

注意上图中服务名称和服务版本号要与刚才kbmMW向导中的一致。

并按下图设置kbmMWClientConnectionPool1 的属性

KbmMW-多层数据库访问服务

好了,更改button1 的点击事件

procedureTForm2.Button1Click(Sender: TObject);
begin
   kbmMWClientQuery1.query.clear;
   kbmMWClientQuery1.query.add('select *from A01');
   kbmMWClientQuery1.Open;

end;

 

编译运行,并点击button1,我们就可以显示数据库了,如图

KbmMW-多层数据库访问服务

好了,我们已经把服务器端的数据显示到客户端了。


参考文档:(delphi窑洞洞主)http://www.cnblogs.com/xalion/tag/KBMMW/

相关文章: