SetRange 活动时如何获取 FireDAC 记录数

Posted

技术标签:

【中文标题】SetRange 活动时如何获取 FireDAC 记录数【英文标题】:How to get FireDAC record count when SetRange active 【发布时间】: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) - 而不是当前范围。

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

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

【问题讨论】:

【参考方案1】:

将 FetchOptions.RecordCountMode 设置为 cmVisible: http://docwiki.embarcadero.com/Libraries/Seattle/en/FireDAC.Stan.Option.TFDFetchOptions.RecordCountMode

【讨论】:

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

以上是关于SetRange 活动时如何获取 FireDAC 记录数的主要内容,如果未能解决你的问题,请参考以下文章

FireDAC 下FDMEMTable的的字段自动获取

FireDAC 下FDMEMTable的的字段自动获取

使用带有anydac(现在为firedac)脚本的参数获取错误

QtCharts setRange 问题

从 Anydac 移动到 Firedac 时 NULL 丢失

Paradox SetRange 在查询 3 个字段时不提供正确的结果