VR
Virtual Reality On-line   Журнал
Новости   |     Журнал    |    Хаkер    |     Магазин   |   Проекты
[   Вход    ]
[Kарта сайтa]

[ Download  ]
[  Конкурс  ]
[ Анекдоты  ]
[  Ссылки   ]
[  Реклама  ]
[ Почтальон ]
[ О проекте ]






TopList
Delphi и базы данных
Фильтрация баз данных
:

Для сегодняшнего занятия нам понадобиться проект, созданный на прошлом занятии (см. прошлый номер). Открой этот проект. Теперь сделаем наш проект покрасивее, для этого выполни следующее:

  1. Установи на форму из палитры Win32 компонент TToolBar.
  2. Выставь свойство Align у DBGrid1 в alTop , а у DBGrid2 в alClient .
  3. Установи на форму из палитры Additional компонент TSplitter.
  4. Выставь свойство Align у TSplitter в alTop .
  5. Теперь устанавливаем поверх ToolBar1 компонент TEdit.

Align - выравнивание, т.е. по какой стороне формы будет выравнивание. После этих манипуляций у тебя должно получится нечто похожее на рисунок 1.
Logo
Рис 1. Форма

Теперь создай событие OnChange для Edit1, это событие происходит каждый раз, когда пользователь вводит текст в Edit1. В созданной процедуре напиши следующее:

if Edit1.Text<>'' then
  begin
   Table1.Filtered:=true;
   Table1.Filter:=DBGrid1.SelectedField.FieldName+
     '='''+Edit1.Text+'*''';
  end
 else
  Table1.Filtered:=false;

Здесь мы использовали конструкцию типа

if Условие then
 Действие1
else
 Действие 2

Суть здесь такая: Если "условие" действительно, то выполнить "Действие 1", иначе выполнить "Действие 2". Действие должно быть только одно, если больше, то их нужно записать между парой "Begin" и "End", как "Действие 1" в нашем примере.

Теперь перейдём непосредственно к рассмотрению примера. Первая строка проверяет, есть ли текст в Edit1. Если да, то выполняется "действие 1", которое состоит из двух строчек. В первой я говорю, что Table1 фильтрованная. Это означает, что видимыми будут только те строки, которые удовлетворяют условию, записанному в свойстве Filter у Table1. В следующей строке я создаю это условие. DBGrid1.SelectedField.FieldName - означает выделенную колонку в DBGrid1, т.е. фильтр будет устанавливаться относительно выделенного поля.

Edit1.Text+'*' - звёздочка в этом выражении означает любые символы. Это значит, если в Edit1 будет введены буквы "Аб", то показываться будут все строки начинающиеся на "Аб". Если не поставить звёздочку, то будут выведены только строки равные "Аб", а строка с "Абв" уже не выведется.

В качестве "действия 2" условия, я отменяю фильтрацию.

Теперь, как это будет выглядеть в общем: Если введён какой-нибудь символ, то установить фильтр. Если ничего не введено, то удалить фильтр, что покажет все строки. Это самый простой способ поиска необходимых строк.

В качестве фильтра можно использовать выражения типа:

Имя_Колонки1='Параметр' AND Имя_Колонки2='Параметр'

В этом случае, фильтрация будет проходить сразу по двум полям, то есть выводиться будут только те строки, которые удовлетворят сразу двум условиям.

Запусти программу и попробуй поиграть с вводом в Edit1. Только эффект будет, если у тебя введены строки в базу данных.

На фильтрацию влияют настройки свойства FilterOption у Table1. Дважды щёлкни по этому свойству в Object Inspector . и перед тобой откроется два свойства:

  • foCaseInsensitive - сравнивать без учёта регистра. Если это свойство = true, то строки "абв" и "АБВ" будут одинаковыми, иначе они будут разными.
  • foNoPartialCompare - Если этот параметр = true, то звёздочка "*", которую мы использовали, работать не будет.

Вот ты и познакомился с фильтрацией. Ты пока потренируй свои возможности, а я подумаю о чём тебе рассказать в следующем номере.

А напоследок я расскажу о некоторых возможностях Database Desktop , которые я опустил до лучших времён в прошлой статье. Так вот, эти лучшие времена настали.
Logo
Рис 2. Database Desktop

  • Minimum Value - минимальное значение параметра.
  • Maximum Value - максимальное значение параметра.
  • Default Value - значение параметра по умолчанию. Этим значением будет заполняться поле при создании новой строки.
  • Picture - Маска, которая показывает, как должно выглядеть поле. Для её назначения используй кнопку Assist

На сегодня хватит, а то у тебя голова вскипит.

 Исходники примера забирай здесь


Design by FMk group ©
Copyright©: Horrific aka Флёнов Михаил ©