Студопедия

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

Разделы сайта

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






Сортировка источника данных BDE






 

Чаще всего необходимые индексы создаются, при разработке схемы базы данных. В принципе, индексы могут быть добавлены в любое время, но лучше заранее все планировать.

После того, как индекс создан, он может использоваться для сортировки данных. Откроем новый проект и поместим на форму:

1. компонент Table (имя по умолчанию Table1 не будем менять);

2. компонент DataSource (имя по умолчанию DataSource1 также не будем менять);

3. компонент DBGrid (имя по умолчанию DBGrid1 также не будем менять).

Установив свойства этих компонентов обычным образом:

1. для свойства DatabaseName компонента Table1 выберем значение псевдонима STUDLIST_ODBC;

2. свойство TableName компонента Table1 установим в значение Students;

3. свойство DataSet компонента DataSource1 установим в значение Table1;

4. свойство DataSource компонента DBGrid установим в значение DataSource1;

5. свойство Active компонента Table1 нужно сделать равным «true», в результате получим форму как на рисунке 1:

 

 

Рисунок 1. Записи источника данных BDE упорядочены по примарному ключу

 

Записи таблицы Students (источника данных BDE) упорядочены по примарному ключу, но желательно, чтобы они были упорядочены в алфавитном порядке. Установить нужный порядок в записях источника данных BDE можно:

1. с помощью существующих индексов, для чего нужно задать свойство IndexName (рисунок 2);

2. с помощью свойства IndexFieldNames, если индекса нет (рисунок 3).

  Рисунок 2. Существующие в таблице индексы можно выбрать в свойстве IndexName для упорядочения записей     Рисунок 3. Если необходимого индекса нет, то можно выбрать поля и создать индекс в оперативной памяти

 

Для сортировки записей таблицы Students по алфавиту выберем, как показано на рисунке 2, индекс Fio – получим требуемый результат:

 

 

Рисунок 4. После выбора индекса Fio записи таблицы Students упорядочены по алфавиту

 

Эквивалентным образом можно было бы использовать свойство IndexFieldNames с достижением того же результата, выбрав Fio (уже не индекс, а поле), как показано на рисунке 3. Стоит заметить, что в списке свойства IndexFieldNames показано поле примарного ключа - n, а списке свойства IndexName присутствует запись PrimaryKey (есть и другие отличия). Применим свойство IndexFieldNames для задания сортировки по двум полям: Id_Gr и Fio. Тогда записи будут упорядочены по группам, а внутри групп – по алфавиту. Для этого в свойстве IndexFieldNames установим значение «Id_Gr; Fio» (при задании свойства кавычки ставить не надо). На рисунке 5 показан результат, где для удобства столбцы переставлены:

 

 

Рисунок 5. Записи упорядочены по группам, а внутри групп – в алфавитном порядке

 

Таким образом, свойства IndexName и IndexFieldNames одинаково хорошо решают задачи сортировки записей источников данных BDE. В рассмотренных примерах порядок сортировки записей устанавливался на этапе разработки, но ничто не мешает делать это на этапе выполнения. Пусть требуется, чтобы при щелчке на заголовке столбца записи упорядочивались по значениям поле, отображаемого в столбце. Для этого достаточно написать обработчик щелчка на заголовке:

 

void __fastcall TForm1:: DBGrid1TitleClick(TColumn *Column)

{

Form1-> Table1-> Active=false;

Form1-> Table1-> IndexFieldNames=Column-> FieldName;

Form1-> Table1-> Active=true;

}

Обработчик имеет название TForm1:: DBGrid1TitleClick поскольку щелчок (Click) осуществляется в строке заголовка (Title) компонента DBGrid1, принадлежащего форме класса TForm1. Единственный аргумент Column является указателем на тот столбец, заголовок которого был отмечен щелчком. В первой строке кода обработчика разрывается связь с источником данных. Так нужно делать всегда при изменении любых параметров источника. Затем новое значение свойства IndexFieldNames устанавливается равным имени того поля, которое отображается в столбце. После этого снова устанавливается соединение с источником данных. Результат работы программы показан на рисунках 6 и 7:

  Рисунок 6. Записи упорядочены по примарному ключу (поле N)     Рисунок 7. После щелчка на заголовке второго столбца записи упорядочены по значениям поля Fio

 

В данном примере проще было использовать свойство IndexFieldNames, но в других случаях может быть удобнее работать непосредственно с имеющимся индексом через свойство IndexName. Если нужного индекса нет, его можно создать в программном коде, а затем использовать. Для этого нужно в коллекцию IndexDefs определений индексов добавить новый индекс с помощью метода AddIndex(…).






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.