3

我在问自己一个关于在 3 层数据快照架构中过滤客户端数据集内容的方法的问题:Oracle DB <=> My Datasnap Server <=> My Datasnap clients

我有一个通过 aTDSProviderConnection和 a访问的 Oracle 表TClientDataset

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

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

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

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

但我不知道如何使用这些组件来实现这一点。

任何想法将不胜感激。

问候,JP

4

2 回答 2

2

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

于 2012-05-06T18:38:00.543 回答
0

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

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

于 2013-03-23T17:03:06.083 回答