Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 7.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.04 Mб
Скачать

Var n: integer;

begin

for n:=0 to Tablel.IndexDefs.Count-1 do begin

ListBoxl.Items.Add(Tablel.IndexDefs[n].Name);

ListBox2.Items.Add(Tablel.IndexDefs[n].Fields);

end;

end;

Рис. 7.2. Получение списка индексов и полей

Для получения списка имен индексов можно использовать метод GetItemNames(List: TStrings). Он возвращает список имен индексов через па­раметр List, в качестве которого можно использовать любой объект типа TStrings, например, ListBoxItems.

Получение списка имен индексов в программе может выглядеть так:

ListBoxl.Items.Clear;

Tablel.GetItemNames(ListBoxl.Items);

Для добавления и удаления индексов используются методы Add и Clear. Про­цедура Add (const Name, Fields: String; Options: TIndexOptions) добавляет новый индекс. Параметры этой процедуры не отличаются от параметров метода Addindex набора данных Table, однако для метода Add не требуется перевод таблицы в режим монопольного доступа, что делает его использование более удобным.

Замечание

Для таблиц Paradox при определении ключа (главного индекса) название ин­декса не задается, т. к. этот индекс не именуется.

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

Tablel.IndexDefs.Clear;

Tablel.IndexDefs.Add('' , 'Number', [ixPrimary, ixUnique]);

Tablel.IndexDefs.Add('indMain', 'Code;Position',

[ixDescending, ixCaseInsensitive]);

В этом примере из набора данных Tablel, связанного с таблицей Paradox, уда­ляются все индексы и создаются два новых индекса: первичный индекс, постро­енный по полю Number, и вторичный индекс indMain, построенный по полям Code и Position.

Ряд методов предназначен для поиска индексов в списке, например, IndexOf, Find и FindIndexForFields. Их удобно использовать в случае, когда индексы или их поля вводятся пользователем на этапе выполнения приложения. Перед ис­пользованием таких индексов целесообразно проверять, существуют ли они в списке индексов, т. к. в противном случае мы рискуем получить исключи­тельную ситуацию.

Функция IndexOf (const AName: String): Integer осуществляет поиск индекса по имени, заданному параметром AName. В качестве результата возвращается но­мер индекса в свойстве items. В случае неудачного поиска возвращается значе­ние -1.

Рассмотрим следующий пример на поиск индекса:

procedure TForml.Button2Click(Sender: TObject);

begin

if Tablel.IndexDefs.IndexOf(Editl.Text) = -1 then begin

MessageDlg('Индекс отсутствует!', mtError, [mbOK], 0);

If Editl.CanFocus then Editl.SetFocus;

end;

end;

Здесь при нажатии кнопки Button2 выполняется проверка существования ин­декса, имя которого введено в поле редактирования Editl. При отсутствии в наборе данных Tablel указанного индекса выдается сообщение об ошибке, и фокус ввода устанавливается на Editl.

Функция FindIndexForFields (const Fields: String): TIndexDef осуществляет поиск индекса по списку полей, заданному параметром Fields. В случае успеш­ного поиска функция возвращает информацию об индексе, если же индекс от­сутствует, то генерируется исключительная ситуа-ция.

Замечание

Если не найден индекс, поля которого полностью совпадают с заданными, но есть индексы, которые включают в себя все заданные поля, то в качестве ре­зультата возвращается первый такой индекс.

При запуске приложения информация об индексах таблицы считывается с дис­ка из соответствующих индексных файлов. При динамическом, т. е. в процессе выполнения приложения, изменении индексов содержимое индексных файлов остается прежним. При необходимости программист должен предусмотреть со­хранение новой информации на диске для ее последующего применения. Для этого можно использовать свойство StoreDefs типа Boolean, которое указывает, нужно ли сохранять информацию об индексах на диске. При любых изменениях в индексах этому свойству нужно установить значение True, и тогда информа-ция об индексах будет автоматически сохранена на диске. Если изменения в индексах сохранять не нужно, то достаточно установить свойству StoreDefs значение False, и изменения в индексах будут действовать только при выполне­нии приложения.