Использование 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}