2016-03-28 31 views
3

私のプロジェクト(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へ

答えて

4
+0

もう一度疑いの余地は明白。 FetchOptions.Modeを適切に設定してくれてありがとうございました。RecordCountModeを完全に見逃していました(むしろ、しばらく前に読んで完全に忘れてしまいました)。遅くこれに先んじて、あなたの支持を非常に感謝します。 – edbored

+0

- 確実である - DBGridに接続されている場合、cmVisibleは別の結果を返しますか?私はそれが元々混乱していたものだと思います。現在目に見えるレコードはグリッドではありませんが、実際にアクセス可能なすべてのレコードのサブセットです。 – edbored

+0

cmVisibleは、現在のすべてのフィルタリング/制限設定でTDataSetナビゲーションAPI(First、Next、Eofなど)を介してアクセスできるレコードの数を意味します。 cmVisibleはGUIまたはTDBGridには関係ありません。より良い名前がcmAccessibleになるかもしれないが、その名前は他の疑問につながるかもしれない... –

関連する問題