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

How to get FireDAC record count when SetRange active

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

我经常使用 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 总是 returns 整个数据集的记录数(根据 fmAll)——而不是当前范围。

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

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

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