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


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


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

Пример.

Пусть В НД Tablel показываются все записи из ТБД "TOV.DB" (Товары). Включим в структуру записи НД Tablel 2 поля : GrNum (Номер группы, Smallint) и Tovar (Наименование товара, String).

Пусть текущий индекс построен по полю 'GrNum'.

Тогда, для фильтрации записей в НД таким образом, чтобы показывались записи только с определенным номером группы, располагаем в форме компоненты Edit1 (для ввода номера группы) и CheckBox1. Если CheckBox1 отмечен (CheckBoxl.Checked = True), то производится фильтрация по номеру группы, введенному в Edit1; если CheckBoxl не отмечен или с него снята отметка (CheckBox1 -Checked = False), в НД показываются все записи из ТБД "TOV.DB" (рис.8.21).

Напишем обработчик события CheckBox1.OnClick, возникающего при отметке CheckBoxl. Заметим, что для простоты правильность ввода в Editi не проверяется.

procedure TForm1.CheckBoxIClick(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}

end {then}

ELSE

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

Tablel.CancelRange;

end;

Неотфильтрованный НД показан на рис.8.21.

В отфильтрованном НД показываются только те записи, индексное поле текущего индекса у которых (т.е. в нашем случае поле GrNum) имеет значение, лежащее в заданном диапазоне. В данном случае диапазон определяется переменной GrNumTmp. Поэтому для GrNumTmp =3 будут показаны записи, принадлежащие к одной группе 3 (рис.8.22).

Если бы мы хотели, чтобы в НД фильтровались записи из нескольких групп, то нам следовало бы добавить в форму второй компонент Edit2, в котором вводился бы номер конечной группы, в то время как в Edit1 вводился бы номер начальной группы. Далее необходимо модифицировать обработчик события CheckBoxl.OnClick, изменив SetRange на SetRange([GrNumTmpl],[GrNumTmp2]);

procedure TForm1.CheckBoxIClick(Sender: T0b;ect) ;

var GrNumTrnpl,GrNumTmp2 : Integer;

begin

IF CheckBoxl.Checked THEN

begin

GrNumTmp1 := StrToInt(Edit1.Text);

GrNumTmp2 := StrToInt(Edit2.Text) ;

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

WITH Table1 do begin

CancelRange;

SetRange([GrNumTrnpl],[GrNumTmp2]) ;

END; {with}

end {then}

ELSE

{

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

Table1.CancelRange;

end;

Результаты фильтрации записей с номерами группы от 2 до 4 показаны на рис.8.23.




Начало  Назад  Вперед



Книжный магазин