TQuery вызываешь метод Next. Вопрос вот в чём: при этом все данные получаются все сразу, и я потом только их перебираю, или же они получаются некими порциями, по одной штуке,
Это называется вроде как "window" (сопрягается с БД-курсором) - больное место DB-компонентов. Если вытаскивать все записи - в плюсах имеешь точное количество записей, правильную навигацию и скроллинг - но может не хватить памяти и уведешь комп в крайне тормознутый своппинг ( особенно если таких прожорливых компонентов много).
В MSE, после жалоб на кривой дельфевский скроллинг в БД-гридах и списках - даже пришлось реализовывать оба варианта - если приаттаченные компоненты для корректного скроллинга требуют всех записей, то вытаскиваются все. Если не требуются - вытаскивается и обновляется только "window".
Query.RecordCount
Чрезвычайно медленная операция в FCL-DB, потому что записи здесь, из соображения поддержания "window - представлены связанным списком, и узнать их количество можно только дойдя до последнего элемента этого списка.
Чтобы этого избежать, например в MSE список заменили на динамический массив записей фиксированного размера (вместо строк хранятся их указатели).
Добавлено спустя 57 минут 10 секунд:SQLQuery.GetCurrentRecord(p: pansichar) - может это как-то можно преобразовать в строку?
Там может быть куча бинарных данных -как их преобразуешь ?
как сделать загрузку по 100 записей,
SQL :
- Код: Выделить всё
select * from Table1 OFFSET x LIMIT y;
или "window"
- Код: Выделить всё
query.FetchRows := y;
?