环境:
DelphiXE10.2.2+kbmMW5.02+unidac7.02+FireBird3.0
打开我们以前的例子,在from里添加以下几个控件
UniConn(TUniConnection):控件里面设置我们要访问的数据库配置;
kbmIBMD(TkbmMWInterbaseMetaData):主要是用来控制生成访问数据库SQL的具体语法的,例如不同的数据库对字段、参数、表名的表达不完全一样,这个可以根据具体数据进行定制。
InterBaseUniProvider1:用于为UniConn提供IB(FB)数据库的接口引用(USES InterBaseUniProvider),不用设置什么参数。
设置完上面的控件,我们进行下一步操作,点file->new->others... 出现kbmMW servicewizard。 出现
这一次,我们选择queryservice / kbmMW_1.0,然后点下一步,
选择我们要使用的数据库访问方式devart UniDac(UNIDAC),再选数据库连接池的位置,点下一步,
上图中服务名称和版本号非常重要,请一定要记下来,下面有一个控件要设置成这两个值,不然就会出错。(这点与洞主的教程也有不同)
然后一路点下去,直到最后生成代码。最后就生成一个TkbmMWqueryservice,并出现下面的界面
可以看见上面几个allowclient...是用来控制客户端访问方式的,我们今天要写一个
在客户端使用sql 语句访问服务器的例子,所以把Allowclinetstament 设为True,
同时为了客户端能够访问服务器的query,设置query属性为kbmMWUNIDACQuery1。
服务器界面多了两个控件:
kbmMWPooledSession:TkbmMWPooledSession;
kbmUniConnPool:TkbmMWUNIDACConnectionPool;(这个可以删除,因为我刚才自己加上去了)
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;
如图所示
并设置kbmMWClientQuery1的属性如下图
注意上图中服务名称和服务版本号要与刚才kbmMW向导中的一致。
并按下图设置kbmMWClientConnectionPool1 的属性
好了,更改button1 的点击事件
procedureTForm2.Button1Click(Sender: TObject);
begin
kbmMWClientQuery1.query.clear;
kbmMWClientQuery1.query.add('select *from A01');
kbmMWClientQuery1.Open;
end;
编译运行,并点击button1,我们就可以显示数据库了,如图
好了,我们已经把服务器端的数据显示到客户端了。
参考文档:(delphi窑洞洞主)http://www.cnblogs.com/xalion/tag/KBMMW/