Разработка баз данных в Delphi. 11 Уроков

 Использование фильтров для ограничения числа записей в DataSet


          Процедура ApplyRange позволяет Вам установить фильтр, который ограничивает диапазон просматриваемых записей. Например, в БД Customers, поле CustNo имеет диапазон от 1,000 до 10,000. Если Вы хотите видеть только те записи, которые имеют номер заказчика между 2000 и 3000, то Вы должны использовать метод ApplyRange, и еще два связанных с ним метода. Данные методы работают только с индексированным полем.

Вот процедуры, которые Вы будете чаще всего использовать при установке фильтров:

procedure SetRangeStart;

procedure SetRangeEnd;

procedure ApplyRange;

procedure CancelRange;

Кроме того, у TTable есть дополнительные методы для управления фильтрами:

procedure EditRangeStart;

procedure EditRangeEnd;

procedure SetRange;

Для использования этих процедур необходимо:

1.  Сначала вызвать SetRangeStart и использовать свойство Fields для определения начала диапазона.

2.  Затем вызвать SetRangeEnd и вновь использовать свойство Fields для определения конца диапазона.



3.  Первые два шага подготавливают фильтр, и теперь все что Вам необходимо, это вызвать ApplyRange, и новый фильтр вступит в силу.

4.  Когда нужно прекратить действие фильтра - вызовите CancelRange.

          Программа RANGE, которая есть среди примеров Delphi, показывает, как использовать эти процедуры. Чтобы создать программу, поместите TTable, TDataSource и TdbGrid на форму. Соедините их так, чтобы Вы видеть таблицу CUSTOMERS из подкаталога DEMOS. Затем поместите два объекта TLabel на форму и назовите их ‘Start Range’ и ‘End Range’. Затем положите на форму два объекта TEdit. Наконец,  добавьте кнопки ‘ApplyRange’ и ‘CancelRange’. Когда Вы все выполните, форма имеет вид, как на рис.7

Рис.7: Программа RANGE показывает как ограничивать число записей таблицы для просмотра.

          Процедуры SetRangeStart и SetRangeEnd позволяют Вам указать первое и последнее значения в диапазоне записей, которые Вы хотите видеть. Чтобы начать использовать эти процедуры, сначала выполните double-click на кнопке ApplyRange, и создайте процедуру, которая выглядит так:


procedure TForm1.ApplyRangeBtnClick(Sender: TObject);

begin

  Table1.SetRangeStart;

  if RangeStart.Text <> '' then

    Table1. Fields[0].AsString := RangeStart.Text;

  Table1.SetRangeEnd;

  if RangeEnd.Text <> '' then

    Table1.Fields[0].AsString := RangeEnd.Text;

 Table1.ApplyRange;

end;

Сначала вызывается процедура SetRangeStart, которая переводит таблицу в режим диапазона (range mode). Затем Вы должны определить начало и конец диапазона. Обратите внимание, что Вы используете свойство Fields для определения диапазона:

Table1.Fields[0].AsString := RangeStart.Text;

          Такое использование свойства Fields - это специальный случай, так как синтаксис, показанный здесь, обычно используется для установки значения поля. Этот специальный случай имеет место только после того, как Вы перевели таблицу в режим диапазона, вызвав SetRangeStart.

          Заключительный шаг в процедуре показанной выше - вызов ApplyRange. Этот вызов фактически приводит ваш запрос в действие. После вызова ApplyRange, TTable больше не в находится в режиме диапазона, и свойства Fields функционирует как обычно.

          Обработчик события нажатия кнопки ‘CancelRange’:

procedure TForm1.CancelRangeBtnClick(Sender: TObject);

begin

  Table1.CancelRange;

end;


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