"Андрей Иванов" ...
Привет, всем! Есть старая прога D7+BDE+Paradox7 розничная торговля лекарствами. Сделал новую D7+FIB+Firebird1.5 средний ассортимент 3-5тыс позиций, но есть и по 10тыс (это те кто еще и косметикой торгует) В старой проге фармацевт видит весь товар в алфавитно порядке. При наборе первых букв названия происходит перемещение к соответствующему товару. В этой ситуации перемещение к нужному товару происходит даже если название товара набирается не совсем точно. Пример: ШАЛФЕЙ а в базе есть ШАЛФЕИ мы все равно окажемся на нужной строке, т.к. поиск идет при наборе каждой буквы и как только идет не совпадение мы просто не перемещаемся с последнего найденного варианта. В новой проге весь товар по умолчанию не видно. Наберут ШАЛФ тогда (оп like 'ШАЛФ%' )и увидят ШАЛФЕИ ШАЛФЕЙ засада1: они набирают ШАЛФЕЙ соответственно не весь товар видят. Кто помнит, что есть еще товар начинает убирать последнии буквы. Такое гадание их напрягает, а они меня. засада2: в старой проге при нахождении товара они еще видят по десять строк с верху и с низу от этого товара. У товара есть цветовые метки (красный истекает срок годности, синий долго лежит и т.п.) и фармацевты говорят, что краем газа они их замечают и в памяти у них это откладывается. Соответственно в новой проге этого нет.
select first 21 * from table where name >= ( select first 1 skip 10 name from table where name <= ( select first 1 name from table where name like 'шалф%' order by name ) order by name desc ) order by name Или, более эффективно и понятно : create or alter procedure proc (mask varchar(255)) returns (id integer, name varchar(255)) as begin select first 1 name from table where name starting :mask order by name into :name; select first 1 skip 10 name from table where name <= :name order by name desc into :name; for select first 21 id, name from table where name >= :s order by name into :id, :name do suspend; end Есс-но, оба индекса на name необходимы. Да, еще, - name должно быть уникально. Ну и на сладкое - сам придумай что делать, если name starting :mask ничего не вернёт -- Хорсун Влад