2016-03-28 62 views
3

我正在從ClientDataSet緩慢移動到我的項目(Delphi 10 Seattle)中的FireDAC FDQuery組件。如何在SetRange激活時獲取FireDAC記錄計數

我經常和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) - 而不是當前範圍。我不得不手動循環範圍計數記錄。

是否有更簡單的方法來獲取當前範圍內的記錄數?

回答

4
+0

再一次言自明。感謝你 - 在設置FetchOptions.Mode後,我完全錯過了RecordCountMode(或者更確切地說,前一段時間已經閱讀過它,完全被遺忘了)。慢慢領先,非常感謝你的支持。 – edbored

+0

- 只是爲了確定 - 如果連接到DBGrid,cmVisible會返回不同的結果嗎?我認爲這就是最初讓我困惑的原因:它不是網格中當前可見的記錄,而是實際上是當前可訪問的所有可能記錄的子集 - 無論是過濾還是受範圍限制 - 是否正確? – edbored

+0

cmVisible表示可通過TDataSet導航API(首先,下一個,Eof等)使用所有當前過濾/限制設置訪問的記錄數。 cmVisible與GUI或TDBGrid無關。可能會更好的名稱會cmcccessible,但這個名稱可能會導致其他疑慮... –