我在问自己一个关于在 3 层数据快照架构中过滤客户端数据集内容的方法的问题:Oracle DB <=> My Datasnap Server <=> My Datasnap clients
我有一个通过TDSProviderConnection
和TClientDataset
访问的 Oracle 表。
多个客户端正在使用数据集,其中包含一个名为 "clientId"
的字段。我希望每个客户端只请求他的行(就像 sql 语句中的WHERE clientId = 'Client1'
一样)。
如果我理解正确,使用过滤器不会减少开销。
myclientdataset.Filter:= 'ClientId = Client1';
myclientdataset.Filtered:= true;
无论如何,这都会传递所有客户端。我希望服务器过滤发送的内容。
但是我不知道如何使用这些组件来完成此操作。
任何想法将不胜感激。
问候JP
听起来像是本电子教程中所述的参数化查询的任务。由于每个客户端设置自己的参数,因此仅将请求的数据传输到每个客户端。
Filter 属性筛选已加载到 ClientDataSet 中的内容。它对从基础数据库检索的数据没有任何影响。
若要使 ClientDataSet 影响从基础关系数据库检索的数据,可以在 CommandText 属性中指定查询,或者在 CommandText 属性中包含参数化查询(或存储过程调用),然后使用 Params 属性定义参数的值。