Использование Delphi для создания приложений баз данных. Устюгова В.Н. - 27 стр.

UptoLike

Составители: 

27
В отличие от критерия в строке Filtered, ограниченного рамками синтаксиса условного
выражения, критерий, реализуемый в обработчике события OnFilterRecord, определяется
синтаксисом Object Pascal и может реализовывать сложные алгоритмы фильтрации. Однако
следует помнить о том, что в обработчике OnFilterRecord последовательно перебираются все
записи набора данных. Это делает использование обработчика OnFilterRecord
предпочтительным для фильтрации небольших объемов записей и сильно ограничивает его
применение при больших объемах.
Всякий раз, когда приложение обрабатывает событие OnFilterRecord, набор данных
переводится из состояния dsBrowse в состояние dsFilter. Это предотвращает модификацию
набора данных во время фильтрации. После завершения текущего вызова обработчика
события OnFilterRecord набор данных переводится в состояние dsBrowse.
Чтобы создать набор данных из тех записей таблицы «Сотрудники», в которых поле
Doljnost содержит значение «доцент», можно использовать такой обработчик:
procedure TForml.Table2FilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
Accept := DataSet ['Doljnost' ] = 'профессор';
end;
Чтобы отфильтровать таблицу «Сотрудники» по условию «Отобрать всех сотрудников,
у кого табельные номера (поле TabNum) больше значения, вводимого пользователем в поле
редактирования Edit1, и в поле FIO есть подстрока символов, вводимых пользователем в
Edit2»:
procedure TForml.Table2FilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
Accept := (DataSet['TabNum'] > Edit1.Text)) and (Pos(Edit2.Text,DataSet['FI O ' ]) > 0);
end;
Если в строке Filter и в обработчике события OnFilterRecord заданы разные критерии
фильтрации, выполняются оба.
2. . Используя таблицы из базы данных DBDEMOS создать приложение, в котором
создать пример фильтрации записей с помощью cобытия OnFilterRecord.
Методы FindFirst, FindLast, FindNext, FindPrior позволяют перемещаться в
неотфильтрованном наборе данных (Filtered = False) между записями, удовлетворяющими
условию фильтрации. Условие фильтрации задается событием OnFilterRecord и/или
свойством Filter. Действие методов таково: они ненадолго переводят набор данных в
отфильтрованное состояние (Filtered = True) без визуализации этой фильтрации в TDBGrid
или другом подобном визуальном компоненте, находят соответствующую запись и переводят
набор данных обратно в неотфильтрованное состояние (Filtered = False). Если искомая
запись найдена, методы возвращают True, в противном случае - False.
В отличие от этих методов, методы First, Last, Next и Prior учитывают критерий
фильтрации, только если набор данных находится в отфильтрованном состоянии (свойство
Filtred содержит True).
3. . Используя таблицы из базы данных DBDEMOS создать приложение, в котором
организовать навигацию в неотфильтрованном наборе данных между записями,
удовлетворяющими фильтру.
В отличие от критерия в строке Filtered, ограниченного рамками синтаксиса условного
выражения, критерий, реализуемый в обработчике события OnFilterRecord, определяется
синтаксисом Object Pascal и может реализовывать сложные алгоритмы фильтрации. Однако
следует помнить о том, что в обработчике OnFilterRecord последовательно перебираются все
записи набора данных. Это делает использование обработчика OnFilterRecord
предпочтительным для фильтрации небольших объемов записей и сильно ограничивает его
применение при больших объемах.
Всякий раз, когда приложение обрабатывает событие OnFilterRecord, набор данных
переводится из состояния dsBrowse в состояние dsFilter. Это предотвращает модификацию
набора данных во время фильтрации. После завершения текущего вызова обработчика
события OnFilterRecord набор данных переводится в состояние dsBrowse.
Чтобы создать набор данных из тех записей таблицы «Сотрудники», в которых поле
Doljnost содержит значение «доцент», можно использовать такой обработчик:

procedure TForml.Table2FilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
Accept := DataSet ['Doljnost' ] = 'профессор';
end;

     Чтобы отфильтровать таблицу «Сотрудники» по условию «Отобрать всех сотрудников,
у кого табельные номера (поле TabNum) больше значения, вводимого пользователем в поле
редактирования Edit1, и в поле FIO есть подстрока символов, вводимых пользователем в
Edit2»:

procedure TForml.Table2FilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
Accept := (DataSet['TabNum'] > Edit1.Text)) and (Pos(Edit2.Text,DataSet[' F I O ' ]) > 0);
end;

Если в строке Filter и в обработчике события OnFilterRecord заданы разные критерии
фильтрации, выполняются оба.


      2. . Используя таблицы из базы данных DBDEMOS создать приложение, в котором
создать пример фильтрации записей с помощью cобытия OnFilterRecord.

      Методы FindFirst, FindLast, FindNext, FindPrior позволяют перемещаться в
неотфильтрованном наборе данных (Filtered = False) между записями, удовлетворяющими
условию фильтрации. Условие фильтрации задается событием OnFilterRecord и/или
свойством Filter. Действие методов таково: они ненадолго переводят набор данных в
отфильтрованное состояние (Filtered = True) без визуализации этой фильтрации в TDBGrid
или другом подобном визуальном компоненте, находят соответствующую запись и переводят
набор данных обратно в неотфильтрованное состояние (Filtered = False). Если искомая
запись найдена, методы возвращают True, в противном случае - False.
      В отличие от этих методов, методы First, Last, Next и Prior учитывают критерий
фильтрации, только если набор данных находится в отфильтрованном состоянии (свойство
Filtred содержит True).


     3. . Используя таблицы из базы данных DBDEMOS создать приложение, в котором
организовать навигацию в неотфильтрованном наборе данных между записями,
удовлетворяющими фильтру.


                                             27