Rob*_*ood 6 delphi tclientdataset
我需要使用TClientdataset制作一些聚合 .在SQL中,这些聚合可以使用以下脚本完成:
Select Sum(column1) from table1 where Date_Column < Date_Value
Run Code Online (Sandbox Code Playgroud)
因为我需要在很长的进程和非常慢的网络中获得更高的速度,所以我想使用内存中的聚合而不是使用sql.我的想法是使用Expression向ClientDataset添加聚合,如下所示:
Sum(column1)
Run Code Online (Sandbox Code Playgroud)
并生成Date_Column索引,然后像这样过滤clientdataset:
myClientdataset.SetRang([value1],[value2]);
Run Code Online (Sandbox Code Playgroud)
我期待看到这个范围的总结果,但是,不幸的是聚合忽略范围并继续给出所有记录的结果!
所以,我的问题是:如何在TClientdataset中实现这一目标?或者,您是否有任何其他想法如何在内存中进行远程聚合?
也许这个链接会有所帮助:分组和聚合
编辑:
我想我已经得到它,它花了我很多时间,这是一个令人沮丧的经历;)
我做了一个示例项目.
首先,没有过滤的聚合:

第二,按下按钮后的聚合:

这是你想要的效果吗?
请注意,我无法通过使用SetRange()来实现此效果,我使用了Filter属性.
如何实现:
按下按钮后的代码:
cdsMain.Filter := 'Population <= 100';
cdsMain.Filtered := True;
if not VarIsNull(cdsMain.Aggregates[0].Value) then
lblAggregatedPopulation.Caption := 'Aggregated population: ' + IntToStr(cdsMain.Aggregates[0].Value);
Run Code Online (Sandbox Code Playgroud)
请注意,在Filter中,您可以轻松更改条件以获得与SetRange相同的结果.但是,我已经读过SetRange在过滤数据方面更快.
希望能帮助到你:)
| 归档时间: |
|
| 查看次数: |
4498 次 |
| 最近记录: |