Как получить количество записей FireDAC при активном SetRange

Я медленно перехожу от 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 всегда возвращает количество записей всего набора данных (согласно fmAll), а не текущий диапазон.

Мне приходится вручную перебирать записи подсчета диапазона.

Есть ли более простой способ получить количество записей в текущем диапазоне?


person edbored    schedule 28.03.2016    source источник


Ответы (1)


Установите для FetchOptions.RecordCountMode значение cmVisible: http://docwiki.embarcadero.com/Libraries/Seattle/en/FireDAC.Stan.Option.TFDFetchOptions.RecordCountMode

person da-soft    schedule 28.03.2016
comment
И снова ослепляюще очевидное. Спасибо за это - разработав соответствующую настройку FetchOptions.Mode, я полностью пропустил RecordCountMode (вернее, прочитал об этом некоторое время назад и полностью забыл). Медленно забегаю вперед и очень признателен за вашу поддержку. - person edbored; 29.03.2016
comment
- на всякий случай - возвращает ли cmVisible другой результат при подключении к DBGrid? Я думаю, это то, что меня изначально смутило: это не видимые в настоящее время записи в сетке, а фактически подмножество всех возможных записей, которые в настоящее время доступны - независимо от того, отфильтрованы ли они или ограничены диапазоном - это правильно? - person edbored; 29.03.2016
comment
cmVisible означает количество записей, доступных через навигационный API TDataSet (First, Next, Eof и т. д.) со всеми текущими настройками фильтрации / ограничения. cmVisible не имеет отношения к GUI или TDBGrid. Возможно, лучше будет имя cmAccessible, но это имя может вызвать другие сомнения ... - person da-soft; 29.03.2016