Использование SetRange

ФИЛЬТРАЦИЯ ЗАПИСЕЙ

Обзор методов

Помимо описываемых ниже методов, присущих только TTable, наборы данных имеют также общие свойства, методы и события для фильтрации записей - Filter, Filtered, OnFilterRecord, FindFirst, FindLast, FindNext, FindPrior. Они описаны в пре­дыдущей главе.

Для фильтрации записей ТБД собственно TTable имеет следующие методы:

SetRangeStart - устанавливает нижнюю границу фильтра;

EditRangeEnd - устанавливает верхнюю границу фильтра;

ApplyRange - осуществляет фильтрацию записей в TTable;

SetRange - имеет тот же эффект, что и последовательное выполнение методов SetRangeStart, SetRangeEnd и ApplyRange. В качестве параметра исполь­зуются массивы констант, каждый из которых содержит значения клю­чевых полей.

Заметим, что фильтрация методами ApplyRange/SetRange должна проводиться по ключевым полям. По умолчанию берется текущий индекс, определяемый свойством TTable.IndexName или TTable.IndexFieldNames. Если значения этих свойств не уста­новлены, по умолчанию используется главный индекс ТБД. Поэтому, если нужно использовать индекс, отличный от главного, необходимо явно переустановить значе­ние свойства TTable.IndexName (имя текущего индекса) или TTable.IndexFieldNames (список полей текущего индекса).

Использование SetRange

Метод

procedure SetRange(constStartValues, EndValues:array of const);

показывает в НД только те записи, индексные поля которых лежат в диапазоне [StartValues..EndValues].

Пример. Пусть в НД Table1 показываются все записи из ТБД tov.DB (Товары). Включим в структуру записи НД Table1 два поля: GrNum (Номер группы) и Tovar (Наименование товара). Пусть текущий индекс построен по полю GrNum.

Тогда для фильтрации записей таким образом, чтобы показывались записи только с определенным номером группы, располагаем в форме компоненты Edit1 (для ввода мера группы) и Checkbox1. Если CheckBox1 отмечен (Checkbox1.Checked = True), то производится фильтрация по номеру группы, введенному в Edit1, в противном случае называются все записи из ТБД (рис. 7.17).

 
 

Рис. 7.17. Неотфильтрованный набор данных.

 

Напишем такой обработчик события CheckBox1.OnClick:

procedure TForm1.CheckBox1Click(Sender: TObject) ;

Var

GrNumTmp: Integer;

Begin

if CheckBoxl.Checkedthen

Begin

GrNumTmp := StrToInt(Edit1.Text) ;

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

with Tableldo

Begin

CancelRange;

SetRange([GrNumTmp],[GrNumTmp]) ;

end; {with}