Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Фильтрация записей одной таблицы






 

Задача фильтрации записей одной таблицы возникает естественным образом, когда из большого числа записей, хранящихся в таблице, в компонентах визуализации (чаще всего в компонент DBGrid) нужно показать лишь небольшую их часть. Например, из всего списка студентов желательно показать только записи о студентах одной группы.

Откроем новый проект и поместим на форму компоненты:

1. Table (имя по умолчанию Table1), его свойству DatabaseName присвоим значение STUDLIST_ODBC, подсоединив через свойство TableName к таблице Students, используя источник данных ODBC;

2. DataSource (имя по умолчанию DataSource1), его свойству DataSet присвоим значение Table1;

3. DBGrid (имя по умолчанию DBGrid1), его свойству DataSource присвоим значение DataSource1;

4. LabeledEdit (имя по умолчанию LabeledEdit1), его свойству EditLabel|Caption присвоим значение «Наберите номер группы».

В компонент Table1 добавим все поля, а в компонент DBGrid1 – все столбцы; и произведем настройку необходимых свойств. В результате получим форму как на рисунке 8:

 

 

Рисунок 8. Форма, с необходимыми для фильтрации данных компонентами

 

Пока форма показывает все записи набора данных, однако, если в свойстве Filter компонента Table1 установить значение Id_Gr=1, а в свойстве Filtered – значение true (рисунок 9), то будут показаны записи о студентах только первой группы (рисунок 10).

 

Рисунок 9. Для фильтрации используются свойства Filter и Filtered

 

Так задавать условия отбора записей можно только для иллюстрации использования свойств Filter и Filtered компонента Table, но на практике их нужно задавать и изменять в программном коде.

 

 

Рисунок 10. Свойства Filter и Filtered позволили отфильтровать записи таблицы Students

 

Можно разными способами менять динамически условия отбора нужных записей. Поскольку в данном примере меняется только номер группы, запрограммируем обработчик выхода из компонента LabeledEdit1 после ввода номера группы (событие onExit).

 

void __fastcall TForm1:: LabeledEdit1Exit(TObject *Sender)

{

Table1-> Active=false;

Table1-> Filtered=false;

Table1-> Filter=" Id_Gr=" + Form1-> LabeledEdit1-> Text;

Table1-> Filtered=true;

Table1-> Active=true;

}

Код обработчика LabeledEdit1Exit достаточно прост:

1. сначала компонент Table1 отсоединяется от источника данных – таблицы Students;

2. свойство Filtered компонента Table1 устанавливается в значение false, что означает отсутствие фильтрации;

3. в свойство Filter компонента Table1 устанавливается нужное значение номера группы, взятое из компонента LabeledEdit1;

4. свойство Filtered компонента Table1 устанавливается в значение true, что означает фильтрацию записей;

5. компонент Table1 отсоединяется с источником данных.

Результат работы программы показан на рисунках 11 и 12. На рисунке 13 показано окно программы сразу после запуска (по ходу дела может показаться окно, в котором нужно ввести имя пользователя и пароль, если он есть):

 

Рисунок 11. В начале показаны записи первой группы, поскольку так было установлено на этапе разработки (Id_Gr=1)

 

После того, как введен новый номер группы, и компонент ввода покинут (для этого нужно отметить любой другой компонент, например, DBGrid1), форма отобразит новые записи:

 

Рисунок 12. Показаны записи новой группы (Id_Gr=3)

 

Вводя номера существующих групп, каждый раз будем получать записи, только этой группы, тем самым будет осуществляться горизонтальная фильтрация набора записей реляционной таблицы Students. Вертикальная фильтрация (например, нужно убрать отображение примарного ключа) достигается средствами самого компонента DBGrid1. Достаточно в редакторе столбцов (вызывается двойным щелчком на компоненте DBGrid1) удалить столбец, в котором отображается примарный ключ (поле n). Этого же результата можно добиться, если:

1. удалить поле n из набора данных (в редакторе полей компонента Table1), но тогда его нельзя будет использовать нигде, что не желательно;

2. у поля n установить в инспекторе объектов свойство visible в значение false, но тогда его нельзя отобразить ни в каких визуальных компонентах, что тоже не желательно.

Таким образом, наилучший вариант вертикальной фильтрации – просто не показывать то или иное поле в визуальном компоненте.

Наконец, если будет введен не правильный номер, то никаких записей показано не будет:

 

Рисунок 13. Студенческой группы с номером 12 – нет

 

Возможность ввода не правильного номера группы является существенным недостатком. К тому же номер группы (это просто примарный ключ таблицы Students) несет мало полезной информации; более информативен идентификатор группы, но он находится в другой таблице.

Компоненты CBuilder позволяют легко решать подобные проблемы.


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.011 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал