Слайд 1ФИЛЬТРАЦИЯ ЗАПИСЕЙ
Программирование баз данных
Слайд 2ФИЛЬТРАЦИЯ – ЭТО ЗАДАНИЕ ОГРАНИЧЕНИЙ ДЛЯ ЗАПИСЕЙ, ОТБИРАЕМЫХ В НАБОР ДАННЫХ.
Состав
записей в НД в данный момент зависит от установленных ограничений, в том числе и от фильтров.
Система Delphi дает возможность осуществлять фильтрации записей:
по выражению;
по диапазону.
По умолчанию фильтрация записей не ведется, и НД Table содержит все записи связанной с ним таблицы БД.
Слайд 3ФИЛЬТРАЦИЯ ПО ВЫРАЖЕНИЮ
При использовании фильтрации по выражению набор данных ограничивается записями,
удовлетворяющими выражению фильтра, задающему условия отбора записей.
Достоинством фильтрации по выражению состоит в том, что она применима к любым полям, в том числе к неиндексированным.
Слайд 4
Свойство Filter типа Srting компонента Table – задает выражение фильтра. В
его состав могут входить элементы:
имена полей таблиц;
литералы – значение, заданное явно (число, строка или символ). В выражение фильтра включаются только выражения строкового типа.
операции сравнения (<, >, =, >=, <=, <>);
арифметические операции (+, -, *, /);
логические операции (and (логическое умножение), or (логическое сложение), not (логическое отрицание));
( ) и [ ] скобки.
Слайд 5
Пример:
Tovar = 'Макароны'
Cena >=150 or Cena
используется для активизации и деактивизации фильтра.
Если Filtered=True, то фильтрация включается, и НД отбираются записи, которые удовлетворяют фильтру, записанному в свойстве Filter.
Если Filtered=False (по умолчанию), то фильтрация выключена.
Слайд 6
Свойство FilterOptions типа TFilterOptions задает параметры фильтрации. Может принимать комбинации двух
значений:
foCaseInsensitive – регистр букв не учитывается, т. е. при задании фильтра Tovar='Хлеб' слова "Хлеб", "хЛеБ", "ХЛЕБ" или "хлеб" будут восприняты как одинаковые;
foNoPartialCompare – выполняется проверка на полное соответствие содержимого поля и значения, заданного для поиска. Обычно применяется для строк. Если известны только первые символы строки, то нужно указать их в выражении фильтра, заменив остальные символом «*» и выключив значение foNoPartialCompare. Например, при выключенном значении foNoPartialCompare для фильтра Tovar = 'C*' будут отобраны записи, у которых в поле Tovar содержатся значения "Сметана", "Сыр", "Сахар" или "Сельдь с/м".
Слайд 7
Для кнопки Включить фильтр:
procedure TForm1.Button1Click(Sender: TObject);
begin
table1.Filtered:=true;
table1.Filter:=edit1.Text;
end;
Для кнопки «Отменить фильтрацию»:
procedure
TForm1.Button2Click(Sender: TObject);
begin
table1.Filtered:=false;
end;
Слайд 8ФИЛЬТРАЦИЯ ПО ДИАПАЗОНУ
При фильтрации по диапазону в НД включаются записи, значения
полей которых попадают в заданный диапазон.
Таким образом, условием фильтрации является выражение вида "значение > нижней границы AND значение < верхней границы" (вместо операций сравнения < > могут указываться и операции <= >=).
Этот способ фильтрации применим только для индексированных полей.
Слайд 9ИНДЕКС ПОЛЯ, ДИАПАЗОН КОТОРОГО ЗАДАН В КАЧЕСТВЕ КРИТЕРИЯ ДЛЯ ОТБОРА ЗАПИСЕЙ,
ДОЛЖЕН БЫТЬ УСТАНОВЛЕН КАК ТЕКУЩИЙ.
Для фильтрации записей по диапазону компонент Table имеет следующие методы:
SetRangeStart – устанавливает нижнюю границу диапазона;
SetRangeEnd – устанавливает верхнюю границу диапазона;
ApplyRange – активизирует фильтр (включение фильтра);
CancelRange – деактивизирует фильтр (выключение фильтра);
Слайд 10
SetRange – имеет тот же эффект, что и последовательное выполнение методов
SetRangeStart, SetRangeEnd и ApplyRange. Процедура позволяет одновременно задать границы диапазона и выполнить фильтрацию.
EditRangeStart – изменяет предварительно заданную нижнюю границу диапазона;
EditRangeEnd – изменяет предварительно заданную верхнюю границу диапазона;
Слайд 11
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;
Слайд 12
Свойство KeyExclusive типа Boolean определяет, как учитывается заданное граничное значение при
анализе записей. Если KeyExclusive = False (по умолчанию), то записи, у которых значения полей фильтрации совпадают с границами диапазона, включаются в состав НД, а если KeyExclusive = True, то такие записи в НД не попадают. Свойство KeyExclusive действует отдельно для нижней и верхней границы.
Слайд 13
Пример:
Table1.IndexName: ='indCena'; //установка текущего индекса indCena (создан по полю Cena таблицы
Tovar.db)
Table1. SetRangeStart;
Table1. KeyExclusive: = True;
Table1.FieldByName('Cena').AsFloat: =100.5;
Записи, содержащие в поле Cena значение 100,5, не входят в отфильтрованный НД (т. к. KeyExclusive = True). Фильтрация по диапазону подчиняется условию Cena >100,5. Если бы KeyExclusive = False, то условие фильтрации выглядело бы по-другому (Cena >=100,5).
Когда одна из границ диапазона не задана, то диапазон открыт, то есть нижняя граница становится равной минимально возможному, а верхняя граница – максимально возможному значению этого поля.