【问题标题】:How to get FireDAC record count when SetRange activeSetRange 活动时如何获取 FireDAC 记录数
【发布时间】:2016-07-15 07:33:08
【问题描述】:

在我的项目(Delphi 10 Seattle)中,我正在慢慢地从 ClientDataSet 迁移到 FireDAC FDQuery 组件。

我经常使用 CDS 的一个技巧是检查范围内的记录数。

即:

CDS.SetRange([Value1][Value2]);  
k := CDS.RecordCount;  
case k of  
  1 : DoSingleThing;  
  2 : DoDoubleThing;  
else  
  BailOnWrongCount;  
end;  

因为我需要同时提供整个数据集,所以我在第一次打开查询时使用 FetchOptions.Mode := fmAll。

执行FDQuery.SetRange([Value1][Value2]); 然后调用FDQuery.RecordCount 总是返回整个数据集的记录计数(根据 fmAll) - 而不是当前范围。

我不得不手动循环遍历范围计数记录。

有没有更简单的方法来获取当前范围内的记录数?

【问题讨论】:

    标签: delphi firedac record-count


    【解决方案1】:

    【讨论】:

    • 再一次令人眼花缭乱。谢谢你 - 在适当地设置 FetchOptions.Mode 之后,我完全错过了 RecordCountMode (或者更确切地说,前一段时间读过它并完全忘记了)。慢慢走在前面,非常感谢您的支持。
    • ——只是为了确定——如果连接到 DBGrid,cmVisible 会返回不同的结果吗?我认为这最初让我感到困惑:它不是网格中当前可见的记录,而是实际上是当前可访问的所有可能记录的子集 - 无论是过滤还是受范围限制 - 这是正确的吗?
    • cmVisible 表示记录数,可通过 TDataSet 导航 API(First、Next、Eof 等)以及所有当前过滤/限制设置访问。 cmVisible 与 GUI 或 TDBGrid 无关。可能更好的名字是 cmAccessible,但这个名字可能会引起其他疑问......
    猜你喜欢
    • 1970-01-01
    • 2022-06-27
    • 2014-03-14
    • 2012-03-11
    • 1970-01-01
    • 2013-03-27
    • 2019-03-30
    • 2019-09-08
    • 1970-01-01
    相关资源
    最近更新 更多