Sla, для MSSQL пагинация row_number() over, как в примере. Но с чем-то его сравнить можно только в вышестоящем запросе, также, как в примере. Но я именно что и хочу избавиться от вложенного select'а. Так что, или row_number() не подходит, или я недопонимаю, что Вы имеете в виду...
HandKot,
По 1:
> запрос выполняется долго (пусть пять минут) ... то пользователь скурится, ожидая ответа
Возможно... Вот и ищу варианты, как это сделать правильнее всего...
По 2:
> Давно не работал с датасет. Нет там св-в "номер строки" и "фильтр". Если есть, то можно попробовать оттолкнутся от этого.
Есть и то и другое. Немного не представляю, как привязаться к номеру строки в данном случае... А "фильтр" - пробовал, результат не тот, что хочу получить.
> если вернутся к DBGrid или он платный ?
Да он штатный
Попробую объяснить иными словами, что хочу реализовать:
Есть формочка с гридом. По умолчанию туда выбирается вся таблица из БД - пусть 100500 записей. Должна отображаться страничками по 50 записей.
Дальше - пользователь может наложить на это все сложный такой фильтр, типа, "Дата больше 01.01.2017 и (Сумма больше 100 и Сумма меньше 500)" - вернется, например, 50000 записей. Должно отображаться страничками по 50 записей.
Дальше - пользователь может наложить на это все быстрый фильтр, типа "Название начинается на 'АБВГД'" - допустим, вернется 100 записей. Должно отображаться страничками по 50 записей.
Пагинацию делаю с помощью "offset..." прямо в запросе. Так вот: при использовании свойства датасета "фильтр" этот "фильтр" наложится только на текущую страницу. А если на ней вообще нет названий начинающихся на 'АБВГД', то пользователь увидит пустой грид, хотя где-то в таблице подходящие записи могут существовать. То есть, фильтр сработает после пагинации.
Привязаться к свойству "номер строки" в данном случае интересная идея, но как это сделать? Если, как вариант, бросить туда еще один датасет, и в него перебрасывать записи из основного датасета? Не будет ли это слишком дорогим для ресурсов? Опять-таки, датасет чтобы работал, его надо Open(), а для этого нужно, чтобы в нем был select... Что-то какой-то велосипед я изобретаю.