2012-05-06 41 views
3

我问自己一个关于过滤在3层的DataSnap架构的ClientDataSet的内容的方式问题:Oracle DB <=> My Datasnap Server <=> My Datasnap clients动态过滤的ClientDataSet内容

我有一个直通和TDSProviderConnection一个TClientDataset访问的Oracle表。

多个客户端正在使用该数据集,其中包含一个名为"clientId"的字段。 我希望每个客户端只请求他的行(就像sql语句中的WHERE clientId = 'Client1'一样)。

如果我理解正确,使用过滤器不会减少开销。

myclientdataset.Filter:= 'ClientId = Client1'; 
myclientdataset.Filtered:= true; 

因为这无论如何都要通过所有的客户端。我想让服务器过滤发送的内容。

但我不知道如何使用这些组件完成此操作。

任何想法将不胜感激。

问候, JP

回答

2

听起来像是如this etutorial描述的参数化查询的任务。由于每个客户端都设置了自己的参数,因此只有所请求的数据被传输到每个客户端。

+0

感谢Uwe指点我这篇文章。 – JPR

0

Filter属性过滤已加载到ClientDataSet中的内容。它对从底层数据库检索的数据没有任何影响。

要使ClientDataSet影响从底层关系数据库检索到的数据,可以在CommandText属性中指定查询,或者在CommandText属性中包含参数化查询(或存储过程调用),然后使用Params属性定义参数的值。