Программирование - это просто
Advertisement
Главная arrow Уроки программирования arrow Delphi - это просто! arrow Урок 8.8. Delphi:  Использование фильтрации записей в компонентах TTable и TQuery (TPanel, Filter)
23.04.2024 г.
Главное меню
Главная
Интернет магазин
Программные продукты
Биржевые роботы
Искусственный интеллект
Математика и информатика
1С:Предприятие
Уроки C#
Уроки Delphi
Уроки программирования
Web-программирование
Дизайн и графика
Компьютер для блондинок
Исходники
Статьи
Платный раздел
Рассказы про компьютеры
Хитрости и секреты
Системный подход
Размышления
Наука для чайников
Друзья сайта
Excel-это не сложно
Все о финансах
.
Урок 8.8. Delphi:  Использование фильтрации записей в компонентах TTable и TQuery (TPanel, Filter) Печать E-mail
Автор megabax   
10.12.2009 г.
Базы данных

Программирование баз данных в Delphi:  Использование фильтрации записей в компонентах TTable и TQuery (TPanel, TEdit, TCheckBox, Filter).

Наша складская программа уже многое может, но что делать , если потребуется просмотреть или просто вывести на экран не все записи , а лишь небольшую их часть, отфильтрованную так, как нам нужно. Для этих целей нам потребуется  2-а свойства компонентов TTable (или TQuery, зависит от того, что используется):

  • Filter
  • Filtered

Свойство "Filter" имеет строковый тип данных и предназначено для ввода  строки относительно которой будет производиться фильтрация,  а свойство "Filtered" имеет логический тип данных и предназначено для активации фильтра данных  (значения: "True" - использовать фильтр данных, а "False" - не использовать).

Теперь попробуем использовать данную информацию для реализации нашего фильтра.  Для начала немножко изменим внешний вид формы "frmTableView"  (Редактирование списка товаров). Разместим на форме компонент -  "TPanel"*:

Программирование баз данных в Delphi:  Использование фильтрации записей в компонентах TTable и TQuery (TPanel, TEdit, TCheckBox).

и дадим ему имя "pnBottom" (свойство компонента "Name").  Вырежем с формы компонент "dbnView" (Делаем клик правой кнопкой по  компоненту и в появившемся контекстном меню выбираем пункт "Cut")*:

Программирование баз данных в Delphi:  Использование фильтрации записей в компонентах TTable и TQuery (TPanel, TEdit, TCheckBox).

Теперь нам необходимо вставить вырезанный компонент на нашу панель  (Делаем клик правой кнопкой по панели "pnBottom" и  в появившемся контекстном меню выбираем пункт "Paste")*:

Программирование баз данных в Delphi:  Использование фильтрации записей в компонентах TTable и TQuery (TPanel, TEdit, TCheckBox).

В итоге мы получили следующую картину (либо что-то похожее)*:

Программирование баз данных в Delphi:  Использование фильтрации записей в компонентах TTable и TQuery (TPanel, TEdit, TCheckBox).

Проведем следующие изменения свойств компонентов:

Имя компонента Свойство Значение Описание действий
pnBottom (TPanel)      
  Align alBottom Выравнивание компонента по нижнему краю.
  Caption Очишаем содержимое. Очищаем заголовок компонента (Панели).
dbgView      
  Align alClient Выравнивание компонента до границ объекта, на котором он находится, в данном случае формы.

Расположим покрасивее компонент "dbnView", который теперь у нас  располагается на панели и вуаля, мы можешь растягивать как угодно форму или развернуть ее на весь экран, вместе с формой будет растягиваться и табличка.

Поместим на нашу панель еще 2-а  компонента, которые понадобятся нам для фильтрации данных:

  • TEdit
  • TCheckBox*

Программирование баз данных в Delphi:  Использование фильтрации записей в компонентах TTable и TQuery (TPanel, TEdit, TCheckBox).

Укажем имя компоненту (свойство Name) TEdit - eFilter и компоненту TCheckBox  - chbFEnable. Теперь очистим содержимое свойства "Text" компонента eFilter,  а заголовку компонента "chbFEnable" (свойство "Caption") присвоить значение  "Активировать фильтр". Если потребуется, то компонент "chbFEnable"  придется немного растянуть, чтобы влазил весь текст заголовка. Смотрим, что примерно должно получиться*:

Программирование баз данных в Delphi:  Использование фильтрации записей в компонентах TTable и TQuery (TPanel, TEdit, TCheckBox).

Поехали дальше. Пишем процедуру, которая будет заниматься фильтрацией данных:

...
  private
    { Private declarations }
    procedure AddFilter;   // Не забудем объявить нашу процедуру в ветке private.
...

procedure TfrmTableView.AddFilter;
var
  strFilter: String;  // Строка фильтра.
  fieldName: String;  // Имя поля.
  fieldNum: Integer;  // Номер поля.
  fieldIsString: Boolean;  // Переменная для определения, является ли поле строкового типа поля.
  i: Integer;  // Код ошибки при преобразовании типа.
  tmpR: Real;  // Переменная для временных числовых данных.
begin
  if
    chbFEnable.Checked  // Проверяем наличие галочки.
    and (Length(eFilter.Text) > 0)  // проверяем наличие строки для фильтрации.
  then
  begin
    fieldName := dbgView.SelectedField.FieldName;  // Получаем имя поля.
    fieldNum := tbView.FindField(fieldName).Index;  // Получаем номер поля.
    // Проверяем, является ли тип поля строковым.
    if (tbView.Fields[fieldNum].DataType in [ftString])
    then
      fieldIsString := True  // Говорим что строка.
    else
    begin
      fieldIsString := False;  // Говорим что не строка.
      Val(eFilter.Text, tmpR, i);  // Так-как не строка, то должны проверить, нет ли символов кроме чисел.
      if i <> 0 then
      begin
        tbView.Filtered := False; // Снимаем фильтр.
        exit;  // Прерываем выполнение, если есть символы кроме чисел.
      end;
    end;
    // Начинаем формировать строку фильтра.
    strFilter := fieldName + '=';
    // Проверяем является ли поле строковым и относительно этого задаем строку фильтра.
    if fieldIsString = True then
      strFilter := strFilter + QuotedStr(eFilter.Text + '*')  // Задаем строке фильтра значение компонента eFilter с символом маски (*) на конце.
    else
      strFilter := strFilter + QuotedStr(eFilter.Text);  // Задаем строке фильтра значение компонента eFilter
    tbView.Filtered := False;  // отключаем фильтр.
    tbView.Filter := strFilter;  // Задаем фильтр.
    tbView.Filtered := True;  // Включаем фильтрацию данных.
  end
  else
    tbView.Filtered := False;  // Отключаем фильтр, если условие не выполнено.
end;

Немножко пройдемся по коду. Определение типа данных, введенных в компоненте eFilter  проводится с целью исключить ошибки при установке фильтра, для этой цели  была использована процедура val(), которая возвращает код ошибки,  в случае когда перевод невозможен, этим мы и воспользовались для определения  типа введенных данных. А определение типа данных выделенного поля проводится для того, чтобы можно было наложить фильтр по маске, для увеличения результата поиска, так-как в данном случае поиск будет проводиться  по вхождению первых символов, либо по тому, как будет наложена масска. Например в случае когда мы укажем строку фильтра вот так - "*CD*", поиск будет проводиться по вхождению слова "CD", независимо от его нахождения в тексте, а в нашем случае маска ставится вконце слова - "CD*", таким образом будет выведен список слов начинающихся на "CD".

Устанавливаем на обработчики событий компонентов(изображено: компонент -> событие):
"eFilter" -> "KeyUp"
"dbgView" -> "CellClick"
"chbFEnable" -> "Click"
выполнение процедуры "AddFilter" и запускаем наш проект, вуаля:

Программирование баз данных в Delphi:  Использование фильтрации записей в компонентах TTable и TQuery (TPanel, TEdit, TCheckBox).

Для установки фильтра по заданному полю, необходимо выделить  поле, на которое необходимо установить фильтр и поставить галочку -  "Активировать фильтр".  Попробуем установить заведомо неверный фильтр на числовое поле,  наш фильтр отключается:

Программирование баз данных в Delphi:  Использование фильтрации записей в компонентах TTable и TQuery (TPanel, TEdit, TCheckBox).

P.S.
При фильтрации необходимо учитывать регистр символов.  

В этой статье был разобран фильтр на основе компонента  TTable, но установка фильтра при использовании компонента TQuery  выглядит аналогичным образом.


Скриншоты, помеченные знаком * , являются цитатами и иллюстрациями   программного продукта "Turbo Delphi", авторское право на который принадлежит "Borland Software Corporation".


Последнее обновление ( 06.11.2011 г. )
 
« След.   Пред. »
 
© 2024 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги