Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв БД 2013-06-02.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
26.54 Mб
Скачать

2.4.14. Локализация и поиск записей в таблице

2.4.14.1. Фильтрация данных (Set Filter)

В FoxPro предусмотрена команда вида Set Filter To [<ВырL>] Она позволяет выводить и обрабатывать только те записи активной таб­ли­цы, которые удовлетворяют заданному условию. Команда Set Filter To (без параметров) отключает фильтр активного файла таблицы (Set Filter To Pol='М' .And. Szarp>1000000).

2.4.14.2. Последовательный поиск (Locate)

Команда Locate For <Условие> [<Границы>] [While <Условие>] осу­ществляет последовательный поиск первой записи в таблице, удов­лет­во­ряющей заданному For-условию, среди запи­сей, находящихся в задан­ных границах, и до тех пор, пока соблюдается While-условие. В случае, если гра­ни­цы и While-условие отсутствуют, поиск ведется во всем файле, на­чи­ная с первой записи. При успешном поиске указатель записей уста­нав­ли­ва­ет­ся на найденную запись. При неудачном поиске функция Recno() возвращает чис­ло записей в таблице плюс 1, функция Found()=.F., а функция Eof() возвращает .Т.

Команда Continue продолжает поиск. При отсутствии очередной за­пи­си в Locate‑группе функция Found()=.F., а функция Eof() возвращает .Т..

2.4.15. Индексирование и открытие таблиц

Индексный файл содержит записи, каждая из которых содержит два зна­чения: индекс (ключа) и номер записи в таблице со значением дан­но­го индекса, записи отсортированы по индексу (п. 1.3.8.1).

В FoxPro можно создать три типа индексных файлов.

Обычный индексный файл. Он имеет расширение имени IDX и содержит один индексный ключ*.

Мультииндексный файл с расширением имени МDX. Такой файл может хранить сразу несколько индексных выражений. Он является соединением нескольких простых индексных файлов.

Структурный индексный файл аналогичен предыдущему, но имеет расширений CDX и открывается автоматически при открытии таблицы. В Visual Foxpro создается автоматически и используется масте­ра­ми и кон­струк­то­ра­ми.

Таблица, имеющая открытый индексный файл, просматривается в по­рядке, определенном индексным выражением <Выр>. При этом фи­зи­чес­кий порядок записей не изменяется. Процессом просмотра и доступа к таблице управляет только один индексный файл (главный). Hекоторые команды (например, Seek) используют глав­ный ин­дексный файл для поиска записей. Однако при изменении инфор­мации в таблице обновляются все открытые индексные файлы. Глав­ный индек­сный файл можно определить при помощи фразы Index команды Use или при помощи команд Set Index и Set Order.

Индексирование выполняется следующей командой:

Index On <Выр> To “<файл.idx>”[For<ВырL>][Compact][Unique][Additive]

<Выр> - индексное выражение содержит поля текущей таблицы. Ин­дек­сный ключ, построенный на основании индексного выражения, соз­дает­ся для каждой записи таблицы и записывается в индексный файл. FoxPro использует эти ключи для просмотра и осуществления дос­тупа к записям таблицы. Для простых индексных файлов длина ин­дек­сного вы­ра­жения не может превышать 100 символов;

<файл .idx> - имя индексного файла IDX. По умолчанию создаваемому индексному файлу присваивается расширение IDX;

Compact - создает компактный файл без пробельных символов IDX;

Unique - дублирующие индексы не включаются в индексный файл;

Additive - при создании индексного файла или файлов для таблицы при по­мощи команды Index, все ранее открытые индексные файлы (за иск­лю­чением структурного индекса) закрываются. Если присутствует Additi­ve, то ранее открытые индексные файлы остаются открытыми.

Примеры

Index On Kod_Pred To Predprk && индексирование по одному полю

Index On Str(Kod_Gor,6)+Comp Tocom && несколько полей в индексе

Index On Oklad For Oklad>1000000 To Kadrokl && фильтрованный индекс

Существующие индексные файлы могут быть открыты ко­ман­дами Use и Set Index.

Рассмотрим эти команды.

Открытие таблицы реализуется командой:

Use [<файл>|?] [In <рабочая область>] [Index <список индексных файлов>][Order[<ВырN>|<индексный файл.idx>][Ascending | Descending],

<файл> - имя таблицы, которую необходимо открыть. Если указан ?, то будет выдано окно открытия файлов со списком предлагаемых таблиц. Если команда Use указана без <файл>, а в указанной рабочей области открыта таблица, то она будет закрыта. Таблица будет также закрыта в случае, когда в этой же рабочей области будет открыта другая таблица;

<рабочая область> - таблица открывается в указанной рабочей области. Для закрытия таблицы в другой рабочей области необходимо выполнить команду Use без имени таблицы, но с указанием рабочей области в In <рабочая область>;

<список индексных файлов> | ? - открывает вместе с таблицей индексные файлы. Файлы в <списке индексных файлов> должны разделяться запятыми. Первый файл в <списке индексных файлов> становится главным индексным файлом, если не указано <ВырN>, которое указывает на главный индексный файл. Индексные файлы пронумерованы в порядке нахождения в <списке индексных файлов>. Если <ВырN> равно 0, то записи файла таблицы будут доступными по физическому номеру, но индексные файлы остаются открытыми;

Order [<индексный файл.idx>] - точное указание индексного файла в качестве главного индекса;

Ascending | Descending - указывает порядок размещения записей в таблице (возрастающий или убывающий). Индексный файл не изменяется, меняется только порядок доступа к записям.

Перед открытием таблицы данных нужно открыть базу с этой таб­ли­цей (п. 2.4.17).

Подключение индексов выполняется командой:

Set Index To [<список открываемых индексных файлов> ]

[Order <ВырN> | <файл .idx> ] [Ascending | Descending] [Additive]

Значения параметров аналогичны одноименным параметрам предыдущей команды.

Additive - все ранее открытые индексные файлы остаются открытыми.

Закрытие индексов выполняется командами: Set Index To или Close Index.

Назначения главного индексного файла выполняется командой

Set Order To [<ВырN> | <Файл.idx> [Ascending | Descending]]

<ВырN> соответствует позиции индекса в списке, заданном с помощью ко­манд Set Index To или Use. Если задана команда Set Order To [0], то отключается доступ к файлу с помощью индексов.

Ascending | Descending - можно также специфицировать упорядочение главным индексом по возрастанию или по убыванию. При этом никаких изменений в индексном файле не будет, а изменится только порядок вывода записей.

Функция Order( ) возвращает имя главного индекса.

Функция Ndx(<ВырN>) возвращает имя индексного файла под номером ВырN.