Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_№4-5.doc
Скачиваний:
9
Добавлен:
25.03.2016
Размер:
288.26 Кб
Скачать
    1. Фильтрация данных

В FoxPro предусмотрена специальная команда вида SET FILTER TO [<условие>] (см. Помощь), которая позволяет установить FOR-условие для всех без исключения команд обработки данных.

    1. Последовательный поиск

Начальный поиск:

LOCATE (см. Помощь) осуществляет последовательный поиск одной самой первой записи в БД, удовлетворяющей заданному условию, среди записей, находящихся в заданных границах. в случае, если границы и WHILE-условие отсутствуют, поиск ведется во всем файле, начиная с первой записи. При успешном поиске указатель записей устанавливается на найденную запись, функция RECNO() равна номеру этой записи, а функция FOUND(), оценивающая результат поиска, возвращает значение “Истина”. В противном случае функция RECNO() равна числу записей в базе плюс 1, а функция FOUND()=.F., а функция достижения конца файла EOF() возвращает .Т.

    1. Продолжение поиска

CONTINUE – команда, которая продолжает поиск записей, начатых ранее командой LOCATE. Если не было найдено нужных записей, указатель записей устанавливается на нижнюю границу поиска (если она введена в команде) или на конец файла (EOF()=.T.).

  1. Индексирование баз данных

Важнейшим элементом любой СУБД является наличие средств ускоренного поиска данных, поскольку поиск – самая распространенная операция в системах обработки данных. Этот механизм обычно реализуется введением так называемых индексных файлов (индексов).

Если файл проиндексирован, команды DISPLAY, EDIT, BROWSE, SKIP, REPLACE и все другие команды, связанные с движением в файле БД, перемещают указатель записей в соответствии с индексом, а не с физическим порядком расположения записей. Так, команды GO TOP и GO BOTTOM устанавливают указатель записей не на первую (номер 1) и последнюю физические записи, а на начальную и конечную записи индекса соответственно.

Один файл БД может быть проиндексирован по нескольким полям и иметь любое число индексов (индексных файлов), которое ограничено только дисковой памятью компьютера. Такие файлы содержат информацию о расположении записей файла БД в алфавитном, хронологическом или числовом порядке для того поля/полей, по которому выполнено индексирование. Допускается индексирование и по логическим полям.

Аппарат индексирования является важнейшим инструментом любой реляционной СУБД. И хотя практически все действия над данными могут быть осуществлены и без участия индексов, совершенно немыслимо их игнорирование при создании реальных информационных систем. Только использование индексов позволяет достичь приемлемых скоростных характеристик обработки данных, поскольку поисковые операции используются в программах очень широко.

В FoxPro можно создать два типа индексных файлов: обычный индексный файл (имеет расширение IDX и содержит один индексный ключ) и мультииндексный файл (имеет расширение CDX, может хранить сразу несколько индексных выражений и является по существу соединением нескольких простых индексных файлов (“тегов”)).

Индексирование выполняется следующей командой: INDEX ON <выр> TO <IDX-файл> ... (см. Помощь). Опции команды – в Помощи. Если индексный файл был уже создан, его нужно открыть при внесении новых записей или редактировании старых и, конечно, если предполагается индексный поиск. Индексные файлы могут быть открыты совместно с открытием своей БД командой:

USE [<DBF-файл>]/[IN<область>] ... INDEX <список индексных файлов> ... (см. Помощь).

Закрыть все индексные файлы можно командой CLOSE INDEX.

При наличии открытого индексного файла для ускорения поиска по ключу, заданному в индексе, можно пользоваться командой SEEK<выражение> (см. Помощь), т.к. команда применяет специальный алгоритм ускоренного поиска, в котором база просматривается не сплошь, а в соответствии с информацией, содержащейся в индексе. Эта команда разыскивает только одну первую запись, в которой в индексном поле наблюдается <выражение>, т.е. когда <поле>=<выражение>, и устанавливает на нее указатель записей. Если действует команда SET NEAR ON , то в случае неудачного поиска указатель записей сразу установится не на конец файла, а на запись, имеющую самое близкое следующее значение к ключу поиска. Если индексный файл был ранее создан, но Вы забыли его своевременно открыть и внесли какие-то изменения в базе, то необходимо его открыть и обновить командой REINDEX.

  1. Работа с несколькими базами

В FoxPro допускается работа сразу с многими базами данных и при этом возможно установление разнообразных связей между ними. Указатель записей в таких связанных базах будут двигаться синхронно. База, в которой указатель движется произвольно, читается старшей, а база/базы, в которой указатель следует за указателем старшей базы, – младшей. В старшей и младшей базах должны быть поля, несущие какой-то общий признак, иначе связь будет бессмысленной. Младшие базы, в свою очередь, могут быть связаны с базами следующего уровня и т.д.

Возможно установление двух типов связей между записями двух сцепленных БД. Связь типа одна_запись_к_одной перемещает указатель в младшей базе таким образом, что он всегда устанавливается на первую встреченную им запись с совпадающим признаком. Остальные такие записи (если есть) остаются “не замеченными”. Эта связь устанавливается просто командой SET RELATION. Связь типа одна_запись_ко_многим позволяет обратиться ко всем записям младшей базы с совпадающим признаком. Оба типа связей могут быть распространены на несколько баз сразу.