在Delphi5的Midas3中,Borland公司完全引入了中间层的无状态的概念。 一是为了迎合Microsoft公司的MTS,另外也就是为了减少中间层服务器的资源消耗,这样,就能够让中间层服务器服务更多的用户。
这样的无状态的中间层服务器就意味着中间层的DataModule不会再为客户端维护打开的数据集的光标(Cursor),客户端只有通过自己维护状态信息来保证提取到正确的数据记录。
那么,客户端是如何维护自身的状态信息的呢。
Delphi5的TClientDataSet加入了IAppServer的接口,在IAppServer的接口中有这么一个接口函数定义:
function AS_GetRecords,这个接口有一个参数“var OwnerData:OleVariant”,能够让客户端在向中间层请求数据的时候传递附加的参数,我们就能够利用这个参数达到维护状态信息的目的。
确定你所要存取的数据表有一个能够唯一标识的字段(或者是一组字段)
在调用AS_GetRecords的时候在OwnerData传递这个唯一标识
ClientDataSet的FetchOnDemand设置成 False
ClientDataSet的PacketRecords设置成10(反正不要太大就行了)
每次向中间层请求数据的时候,把唯一标识传给中间层服务器,让中间层的DataModule里面的Provider打开数据集,然后把数据集利用Locate方法定位到唯一标识记录,然后调用Next方法就可以了
注意,每次Fetch数据时传递的唯一标识就是客户端的ClientDataset的最后一条记录的那个啦