Delphi 3 и создание приложений баз данных

Фильтрация по составному индексу


Если индекс, по которому необходимо осуществить фильтрацию, состоит более чем одного поля:

• при использовании метода Set Range значения полей должны перечисляться через запятую внутри квадратных скобок;

• при использовании SetRangeStart, SetRangeEnd и т.д. значение каждого поля должно устанавливаться явно.

Пример.

Пусть рассмотренный выше НД отсортирован по индексу, состоящему из полей 'GrNum;Tovar'. Реализуем фильтрацию записей по заданному значению поля GrNum и любому значению поля Tovar (рис.8.29).

Для простоты проверку правильности ввода номера группы не производим. Обработчик выбора CheckBoxl ("Фильтровать") выглядит так:

procedure TFormI.CheckBoxIClick(Sender: TObject);

var GrNumTmp : Integer;

TovarTmp : String;

begin

IF CheckBoxl.Checked THEN

begin

GrNumTmp := StrToInt(Editi.Text);

TovarTmp := Edit2.Text;



{

——————фильтрация записей в НД————}

WITH Tablel do begin

CancelRange;

SetRange([GrNumTmp,TovarTmp],[GrNumTmp,'яя']) ;

END; {with}

end {then}

ELSE

{

————————отмена фильтрации ———}

Tablel.CancelRange;

end;

Реализацию выборки обеспечивает метод

SetRange([GrNumTmp,TovarTmp],[GrNumTmp,'яя']);

Интересно, что если требуется показывать в НД все записи группы, начинающиеся со значения в Edit2.Text, то в качестве значения товара в конечном условии фильтрации нужно объявить максимально возможное значение, которое может встретиться в качестве названия товара. Поскольку строчные буквы имеют бoльшие коды, чем заглавные, и название товара не может начинаться с 'яя', эти символы вполне могут использоваться как верхний ограничитель наименования товара.

Пусть введена группа и не введено наименование товара. В этом случае в отфильтрованный НД попадут все товары данной группы, т.е. записи , у которых определено наименование товара (рис.8.30):

Пусть введен номер группы и наименовании товара - 'Макароны'. В этом случае в отфильтрованный НД попадут товары данной группы, у которых наименование больше или равно "Макароны" (рис.8.31):



Содержание раздела