"Андрей Иванов" ...
Привет, всем!
Есть старая прога 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 ничего не
вернёт
--
Хорсун Влад