私のプロジェクト(Delphi 10 Seattle)のClientDataSetからFireDAC FDQueryコンポーネントにゆっくりと移行しています。SetRangeがアクティブのときFireDACレコード数を取得する方法
私がよくCDSで使用するトリックの1つは、範囲のレコード数をチェックすることです。
です:
CDS.SetRange([Value1][Value2]);
k := CDS.RecordCount;
case k of
1 : DoSingleThing;
2 : DoDoubleThing;
else
BailOnWrongCount;
end;
私が同時に利用可能なデータセット全体を必要とするので、私はFetchOptions.Modeを使用します。= fmAll最初のクエリを開くとき。
Doing FDQuery.SetRange([Value1][Value2]);
の場合、FDQuery.RecordCount
は常に(現在の範囲ではなく)fmAll全体のデータセットのレコード数を返します。
私は手動で範囲を数えるレコードをループする必要があります。
現在の範囲内のレコード数を取得する簡単な方法はありますか? cmVisibleへ
もう一度疑いの余地は明白。 FetchOptions.Modeを適切に設定してくれてありがとうございました。RecordCountModeを完全に見逃していました(むしろ、しばらく前に読んで完全に忘れてしまいました)。遅くこれに先んじて、あなたの支持を非常に感謝します。 – edbored
- 確実である - DBGridに接続されている場合、cmVisibleは別の結果を返しますか?私はそれが元々混乱していたものだと思います。現在目に見えるレコードはグリッドではありませんが、実際にアクセス可能なすべてのレコードのサブセットです。 – edbored
cmVisibleは、現在のすべてのフィルタリング/制限設定でTDataSetナビゲーションAPI(First、Next、Eofなど)を介してアクセスできるレコードの数を意味します。 cmVisibleはGUIまたはTDBGridには関係ありません。より良い名前がcmAccessibleになるかもしれないが、その名前は他の疑問につながるかもしれない... –