Пояснение к работе

Наборы данных 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 (список полей текущего индекса).

Метод procedure SetRange(const StartValues, EndValues: array of const); показывает в НД только те записи, индексные поля которых лежат в диапазоне [StartValues..EndValues].

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

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

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

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

procedure TForm1.CheckBox1Click(Sender: TObject) ;

var

GrNumTmp: Integer;

begin

if CheckBoxl.Checked then

begin

GrNumTmp := StrToInt(Edit1.Text) ;

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

with Tablel do

begin

CancelRange;

SetRange([GrNumTmp],[GrNumTmp]) ;

end; {with}