Перед началом написания статьи стоит отметить, что вопрос касается использования компонентов FireDAC в среде разработки Delphi, а именно работы с диапазоном записей в FDQuery. Это важно для понимания контекста и структуры будущей публикации.
Как узнать количество записей в текущем диапазоне FDQuery в Delphi
В процессе перехода от использования ClientDataSet к компонентам FireDAC FDQuery в проектах на Delphi 10 Seattle, разработчики могут столкнуться с необходимостью проверки количества записей в определенном диапазоне. Это может быть полезно для различных задач, например, при выполнении специфических действий в зависимости от числа записей.
Проблема
При использовании ClientDataSet (CDS) разработчики могут легко проверить количество записей в заданном диапазоне следующим образом:
CDS.SetRange([Value1][Value2]);
k := CDS.RecordCount;
case k of
1 : DoSingleThing; // Действие при одной записи
2 : DoDoubleThing; // Действие при двух записях
else
BailOnWrongCount; // Действие в случае неверного количества записей
end;
Однако, когда используется FDQuery с установленным FetchOptions.Mode := fmAll для получения всего набора данных одновременно, вызов FDQuery.RecordCount возвращает общее количество записей во всём наборе данных, а не в текущем диапазоне. Это заставляет разработчика вручную перебирать записи в диапазоне для подсчета.
Решение
Для решения этой проблемы необходимо установить свойство FetchOptions.RecordCountMode в значение cmVisible. Это позволит получить количество записей, доступных через навигационный API TDataSet (First, Next, Eof и т.д.), с учетом текущих настроек фильтрации/ограничения.
Важно понимать, что cmVisible не связано с отображением записей в пользовательском интерфейсе или TDBGrid. Это количество записей, которые доступны для перебора с учетом текущих настроек фильтрации и ограничений.
Разработчики могут быть запутаны из-за названия cmVisible, так как оно может не сразу указывать на то, что возвращаемое значение относится к подмножеству всех возможных записей, доступных в данный момент (фильтрованные или ограниченные диапазоном). Возможно, более точное название было бы cmAccessible, но это также может привести к недопониманию.
В заключение, использование свойства FetchOptions.RecordCountMode с установкой его в значение cmVisible позволяет разработчикам получить количество записей в текущем диапазоне FDQuery, что упрощает их работу и повышает эффективность кода.
Объяснение использования компонента FireDAC для работы с диапазоном записей в FDQuery в среде разработки Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS