Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Ускоренный поиск

Читайте также:
  1. E)& поиск зарубежных партнеров
  2. I. ВСЕОБЩИЙ КРИЗИС И ПОИСК ПУТЕЙ ВЫХОДА ИЗ НЕГО
  3. II. Стадия поиска 5-12 дней
  4. А если всё-таки попробовать поискать?
  5. Автоматизированные поисковые комплексы
  6. аза 3 (от 6 месяцев до 3 лет): интенсивная привязанность и активный поиск близости.
  7. амысел - это установка режиссера на творческий поиск.

Индексный файл не только упорядочивает базу данных для просмотра, но и ускоряет поиск в ней по ключу, заданному в индексе, если пользоваться командой

• SEEK <выражение>

Команда применяет специальный алгоритм ускоренного поиска, в котором база просматривается не сплошь, а в соответствии с информацией, содержащейся в индексе.

Команда SEEK разыскивает только одну первую запись, в которой в индексном поле наблюдается <выражение>, т.е. когда <поле>=<выражение>, и устанавливает на нее указатель записей.

Пример. Проведем в базе KADR.DBF поиск записи с табельным номером 234.

USE kadr INDEX kadrtab SEEK 234

DISPLAY tab,fam Record # TAB FAM

4 234 ПОПОВ А.А.

Функции RECNO(), FOUND(), EOF() реагируют на результаты поиска командой SEEK точно гак же, как и командами LOCATE и CONTINUE. Если поиск удачный, RECNO() равно номеру найденной записи, FOUND()=.T, EOF()=.F.; если нет, RECNO() равно числу записей в базе данных плюс единица, FOUND()=.F., EOF()=.T.. Все это относится и к индексам с FOR-условием.

Для индексированных баз существует модификация функции указания номера записи с аргументом нуль - RECNO(O), которая в случае неудачного поиска возвращает номер записи, имеющей самое близкое следующее значение к ключу поиска, заданному в команде SEEK. Использовав этот номер, можно затем перейти в указанную запись. Однако если действует команда

• SET NEAR ON

то в случае неудачного поиска указатель записей сразу установится не на конец файла, а на эту близкую запись. По умолчанию SET NEAR OFF.

Это предоставляет инструмент ускоренного поиска по ключу, заданному приблизительно или даже частично неправильно. Например, задана фамилия с неверными инициалами или окончанием. Часто такая ситуация встречается при поиске в числовых полях.

При этом мы не будем стеснены в возможности перемещаться в базе данных. Такой механизм называется "мягким" или приблизительным поиском в отличие от обычного, точного поиска.

В FoxPro имеется очень полезная функция индексного поиска

SEEK(<выражение>[,<ОБЛАСТЬ>])

Она так же, как и команда SEEK, выполняет поиск записи в индексном файле и устанавливает на него указатель записей с возвращением значения.Т., если поиск удачный, и F•- если не т. Функция SEEK() заменяет- комбинацию команды SEEK и функции FOUNDO. Такое совмещение весьма полезно, поскольку обычно ддя того, чтобы предпринять какие-то дальнейшие шаги после поиска, все равно нужно убедиться в его успешности, функция FOUND() обычно включается в состав команды анализа выполнения условий IF. Кроме того, она допускает поиск в неактивной рабочей <области>, заданной числовым выражением.

Пример. Пусть нужно указать фамилии родителей, у которых трое детей. Если их не окажется, выводить ничего не нужно.

USE kadr

INDEX ON det TO kadrdet COMPACT

IF SEEK(3)

LIST fam,det WHILE det=3

ENDIF

Если индексный файл был ранее создан, но вы забыли его своевременно открыть и внесли какие-то изменения в базе, то необходимо его открыть и обновить командой


Дата добавления: 2015-08-02; просмотров: 50 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Индексирование баз данных в СУБД Fox Pro| REINDEX

mybiblioteka.su - 2015-2024 год. (0.007 сек.)