2016-03-28 2 views
3

Я медленно перехожу из компонентов ClientDataSet в FireDAC FDQuery в свои проекты (Delphi 10 Seattle).Как получить счетчик записи FireDAC, когда SetRange активен

Один трюк, который я часто использую с 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

- чтобы быть уверенным - делает cmVisible возвращает другой результат, если подключен к DBGrid? Я думаю, это то, что изначально меня смутило: это не видимые в настоящее время записи в сетке, но на самом деле это подмножество всех возможных записей, которые в настоящее время доступны - независимо от того, отфильтрованы или ограничены диапазоном - это правильно? – edbored

+0

cmVisible означает количество записей, которые доступны через навигационный API TDataSet (First, Next, Eof и т. Д.) Со всеми текущими настройками фильтрации/ограничения. cmVisible не связан с GUI или TDBGrid. Может быть, лучше имя будет cmAccessible, но это имя может привести к другим сомнениям ... –