Иллюстрированный самоучитель по Delphi 7 для профессионалов

Использование индексов

Обычно использование индексов – прерогатива сервера БД. Из компонентов Delphi только табличные компоненты могут в какой-то степени управлять использованием индексов. Очевидно, что удаленное соединение не способствует эффективному управлению индексами набора данных на сервере. Поэтому компонент TclientDataSet предоставляет разработчику возможность создавать и использовать локальные индексы.

Правильно созданные и используемые локальные индексы могут существенно ускорить выполнение операций с набором данных. В то же время их невозможно сохранить вместе с набором данных локально, их необходимо перестраивать при каждом новом открытии набора данных и его обновлении с сервера.

Для создания локального индекса используется метод:

procedure Addlndex(const Name, Fields: string;
Options: TIndexOptions;
const DescFields: string = '';
const CaselnsFields: string = '';
const GroupingLevel: Integer = 0);

Параметр Name определяет имя нового индекса. Параметр Fields должен содержать имена полей, которые разработчик хочет включить в индекс. Имена полей должны разделяться точкой с запятой. Параметр options позволяет задать тип индекса:

TIndexOption = (ixPrimary, ixUnique, ixDescending,
 ixCaselnsensitive, ixExpression, ixNonMaintained);
TIndexOptions = set of TIndexOption;

Где:

  • ixPrimary – первичный индекс ;
  • ixUnique – значения индекса уникальны;
  • ixDescending – индекс сортирует записи в обратном порядке;
  • ixCaselnsensitive – индекс сортирует записи без учета регистра символов;
  • ixExpression – в индексе используется выражение (для индексов dBASE);
  • ixNonMaintained – индекс не обновляется при открытии таблицы.

При этом можно задать поля, порядок сортировки которых будет обратным. Для этого их необходимо перечислить через точку с запятой в параметре DescFields. Параметр CaselnsFields аналогичным образом позволяет задать поля, на сортировку которых не влияет регистр символов.

Параметры DescFields и CaselnsFields используются вместо параметра Options.

Параметр GroupingLevel задает уровень группировки полей индекса. Подробнее об этом см. ниже в разд. "Агрегаты" этой главы.

Основные свойства компонента, обеспечивающие управление индексами, совпадают с аналогичными свойствами табличных компонентов (подробнее об этом см. гл. 12). Поэтому лишь кратко перечислим их.

При работе с компонентом разработчик имеет возможность управлять индексами.

Созданный индекс подключается к набору данных свойством:

property IndexName: String;

…которое должно включать имя индекса или использовать свойство:

property IndexFieldNames: String;

…в котором можно задать произвольное сочетание имен индексированных полей таблицы. Имена полей разделяются точкой с запятой. Свойства IndexName и IndexFieldNames нельзя использовать одновременно.

Число полей, используемых в текущем индексе табличного компонента, возвращает свойство:

property IndexFieldCount: Integer;

…свойство:

property IndexFields: [Index: Integer]: TField;

…представляет собой индексированный список полей, входящих в текущий индекс.

Параметры созданных индексов доступны в свойстве:

property IndexDefs: TIndexDefs;

Класс TIndexDefs подробно рассматривается в гл. 12.

После создания и подключения индекса записи набора данных "переупорядочиваются" в соответствии со значениями индексированных долей.

Удаление локального индекса обеспечивает метод:

procedure Deletelndex(const Name: string);

После удаления текущего индекса или его отмены (обнуления свойства IndexName) записи набора данных "переупорядочиваются" в исходном порядке, соответствующем порядку записей набора данных на сервере.

Имена всех существующих в наборе данных индексов можно загрузить в список при помощи метода:

procedure GetlndexNames(List: TStrings);

Например:

Memol.Lines.Clear;
ClientDataSet.GetlndexNames(Memo1.Lines);
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.