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 记录数的主要内容,如果未能解决你的问题,请参考以下文章
使用带有anydac(现在为firedac)脚本的参数获取错误