Всем привет дорогие друзья! Сегодня наша статья будет посвящена обратно работе с файловой базой данных в Delphi. Нам осталось рассмотреть совсем немного тем, и мы закончим с данной серией. В прошлой статье по работе с файловой БД, мы рассмотрели основные методы по работе с набором данных.
Сейчас мы рассмотрим, как можно работать с индексами в файловой БД. Индекса являются неотъемлемой частью любой базы данных. С помощью индексов можно упорядочивать данные, что облегчает поиск, это самое простое назначение индексов.
В TClientDataSet индекса можно создать несколькими способами. Первый способ – это способ, при помощи свойства IndexDef. Вам необходимо открыть редактор данного свойства и добавить в него новый индекс (как-нибудь его обозвать). Я назвал его iName.
Идем дальше. Мы выделяем данный индекс и начинаем настраивать его. После того, как Вы его выделили, переходим к свойству Fields, в котором необходимо указать поле нашей таблицы, выступающее в роли нашего индекса. Если в Вашей таблице несколько индексов, то в поле Fields Вы можете перечислять несколько полей таблицы, через точку с запятой. После этого необходимо перейти в свойстве Options нам необходимо задать тип индекса, они могут быть следующими:
ixPrimary | Первичный ключ таблицы |
ixUnique | Уникальный индекс, который не допускает повторений в таблице, в поле, к которому он подключен. Если у Вас есть уже ни уникальные записи, то при задании данного типа индекса, у Вас будет ошибка в приложении |
ixDescending | Индекс, который применяется для обратной сортировки, то есть для убывания значений |
ixExpression | Индекс, который основан на ключевом выражении и применяется только лишь для таблиц dBase |
ixCaseInsensitive | Индекс, который не чувствительный к регистру символов |
ixNonMaintained | Индекс, который не будет обновляться после редактирования нашей таблицы |
Вы выбираете тип индекса, который Вам необходим и больше всего подходит к Вашей таблице. Почти что мы закончили с этим. Нам осталось лишь подключить индекс к нашему проекту. Это сделать мы можем двумя способами. Для этого мы выделяем компонент TClientDataSet и находим там свойство IndexName. В данном свойстве, из выпадающего списка, необходимо выбрать имя индекса, который мы создавали, способом выше.
Второй способ – выделяем также компонент TClientDataSet и находим там свойство IndexFieldsName, которое имеет тип WideString. В нем Вы можете напрямую указать поля, которые будут индексами, также можете указывать их через точку с запятую.
Стоит также запомнить о том, что использовать одновременно два этих свойства нельзя, одно из них в любом случае будет замещаться другое, во время работы программы.
Вы можете создать и индекса программно: например, при открытии нашей таблицы, задать им тип индекса, а также поля, которые будут выступать в роли индексов.
Попробуйте создать, данным образом индекс и добавить в свой проект какие-нибудь значения. У меня автоматически, при добавлении данных, таблица сортируется в алфавитном порядке. У Вас должна создаться похожая ситуация.
Индекс также можно создать и при помощи процедуры:
procedure AddIndex(const Name: string; const Fields: string; Options: TIndexOptions; const DescFields: string = »; const CaseInsFields: string = »; const GroupingLevel: Integer = 0);
В данной процедуре Вы уже знакомы с частью параметров, например:
- Name – имя индекса
- Fields – список полей, которые относятся к индексу
- Options – настройки индекса, тип индекса
- DescFields – список полей индекса, которые будут учитываться при сортировке в обратном направлении
- CaseInsFields – список полей индекса, которые не будут учитывать регистр символов
- GroupingLevel – это уровень группировки, который может группировать данные, наподобие SQL-запроса с директивой GROUP BY. Если данный параметр равен 0, то группировка отключена, если равен 1, то это означает, что в процессе группировки будет использоваться только первое поле в индексе, если равен 2, то первое и второе поле, ну и так далее
Хочется сказать, что метод AddIndex будет использоваться только для активного набора данных, то есть, который открыт в данный момент времени. И индекс, который создан данным методом будет существовать только во время работы программы, по ее завершению он исчезнет.
Вы также можете удалить индекс с помощью процедуры:
procedure DeleteIndex(const Name: string);
Вам, чтобы удалить индекс, достаточно знать только лишь его имя.
Вот и все с данной темой. Как видите, ничего сложного в этом нет, проект я приложу, Вы можете скачать его по данной ссылке, и не забудьте прочитать предыдущие статьи по работе с файловыми базами данных в Delphi: