2. Управление индексами
Как уже говорилось, один и тот же файл-DBF может иметь любое число индексов, и все они могут быть одновременно открыты командами SET INDEX или USE...INDEX. В нашем случае команда
USE kadr INDEX kadrtab, polfam
открывает два индекса KADRTAB.IDX и POLFAM.IDX.
Пусть нужно проиндексировать базу KADR.DBF по полям SZAR и DTR таким образом, чтобы зарплата шла по возрастанию, а дата рождения - по убыванию, т.е. среди лиц, имеющих одинаковое значение поля SZAR, сначала расположить младших по возрасту. Такое индексирование осуществляет команда, где DTR вычитается из заведомо большей даты (здесь 0] .01.2000г.).
При вводе, удалении, редактировании записей все открытые индексные файлы будут соответствующим образом изменяться. Однако главным управляющим индексом, т.е. таким, в соответствии с которым при необходимости будет перемещаться указатель записей, может быть, конечно, только один. Им является индексный файл, открытый самым первым в команде (здесь KADRTAB.IDX), или назначенный таковым опцией ORDER.
В случае, если необходимо сделать главным другой индекс, используется команда
• SET ORDER TO [<выр№>/<IDX-файл>/[ТАG] <имя тега> [OF <СDХ-файл>]] [IN <область>] [ASCENDING/DESCENDING]
Команда объявляет главный индекс/тег среди открытых IDX- или CDX- индексных файлов в текущей или указанной рабочей <области>. Опции команды совпадают с описанными выше для команды SET INDEX TO. Например, следующие команды сделают главным индекс POLFAM.IDX
SET ORDER TO polfam или SET ORDER Т0.2 Команда SET ORDER TO 0 или просто SET ORDER TO без параметра отключает все индексы от управления перемещением указателя записей. Теперь уже не будет главного индекса. Однако сами индексы остаются открытыми и чувствительными к изменениям в базе данных.
При необходимости имя главного индексного файла может быть выяснено с помощью функции
• ORDER([<o6ласть>])
Функция возвращает имя главного индексного файла или главного тега из мультииндексного файла для текущей рабочей области или области, заданной номером или псевдонимом.
Рассмотрим ряд вспомогательных команд и функций для паботы с мультииндексными файлами.
• COPY INDEXES <IDХ-файлы>/АLL, [ТО <CDX-файл>] Команда копирует все (ALL) или перечисленные через запятую открытые <IDX-файлы> в структурный или указанный мультииндексный <СDХ-файл>. Каждый такой файл становится тегом в CDX-файле с тем же самым именем, что и IDX-файл. Если CDX-файла нет, он создается.
• COPY TAG <тег> [OF <СDХ-фаил>] TO <IDХ-файл>
Команда создает <IDХ-файл> из поименованного <тега>, находящегося в указанном или (по умолчанию) структурном мультиин-дексном <СDХ-файле>. Файл должен быть открыт
• DELETE TAG <тег1> [OF <СDХ-файл 1>] [,<тег2> [OF <СDХ-файл 2>]]...
• DELETE TAG ALL [OF <СDХ-файл>]
Команды удаляют указанные или все (ALL) теги из открытого в текущей рабочей области CDX-файла. По умолчанию сначала рассматривается структурный CDX-файл (если он есть).
• NDX(<BbipN>[,<o6nacTb>])
Функция выдает прописными буквами полное имя индексного файла, открытого в текущей или указанной рабочей <области>. <BырN> указывает номер файла в команде открытия. Если файла нет, возвращается пустая строка.
• CDX/MDX(<BыpN>[,<o6ласть>])
Функция возвращает имя открытого CDX-файла. Первым считается структурный CDX-файл (если есть). Имя такого файла всегда совпадает с именем самой базы. Далее идут обычные мультииндексные файлы в порядке их открытия. Если структурного CDX-файла нет, рассматриваются только обычные CDX-файлы. <BыpN> - номер по порядку индексного файла, имя которого возвращается с учетом вышесказанного. Если файла с таким номером нет, возвращается нулевая строка.
• SYS(22 [,<область>])
Функция возвращает имя главного индекса или главного тега в IDX/CDX-файле. <0бласть> задается только числом.
• TAG([<CDX-файл>,] <вырN> [,<область>])
В соответствии с порядком открытия (<BыpN>) возвращает имя тега из <СDХ-файла> или имя IDX-файла для базы данных из текущей или указанной рабочей <области>. Если опущено имя CDX-файла, функция возвратит имя IDX-файла (если есть), или имя тега структурного мультииндексного файла (если есть), или имя тега из другого CDX-файла.