Поиск данных в таблице
Следующая группа команд, которую мы рассмотрим, - команды поиска записей. Основные команды поиска записей - LOCATE, CONTINUE и SEEK. Первая ивторая работает с таблицами независимо от того, проиндексирована таблицаили нет. Команда SEEK осуществляет поиск только в проиндексированных таблицах.
> <Условие1> - ищется первая запись, удовлетворяющая этому условию;
> Диапазон - задает диапазон поиска и может принимать значения: ALL -все записи, NEXT <Количество> - указанное количество следующих за текущей записей, RECORD <Номер_записи> - поиск в конкретной записи,REST - поиск начиная с текущей записи и до конца таблицы;
> <Условие2> - задает выражение, при истинности которого продолжается поиск;
> NOOPTIMIZE - отключает использование оптимизации Rushmore.
Команда LOCATE ищет запись, соответствующую условиям поиска, и делаетее текущей. Продолжить поиск после нахождения первой записи, удовлетворяющей условиям поиска, можно посредством команды CONTINUE. Поиск в этомслучае будет продолжен с записи, следующей за текущей.
Рассмотрим синтаксис команды SEEK.
> <Ключевое_выражение> - выражение для поиска записи, соответствующееключевому выражению, использованному при индексировании;
> <Номер_индекса> I <Имя_:1Лх-файла> - определяет номер или имя индексного idx-файла, в соответствии с индексами которого производитсяпоиск;
> <Имя_тега> - имя тега в cdx-файле, в соответствии с индексами которогопроизводится поиск;
> ASCENDING - поиск в таблице будет производиться по возрастанию индексов;
> DESCENDING - поиск в таблице будет производиться по убыванию индексов;
> <Номер_рабочей_области> I <Алиас_таблицы> - обозначение таблицы, вкоторой производится поиск.
Команда SEEK ищет запись, соответствующую условиям поиска, и делает еетекущей. Как мы уже говорили, команда SEEK работает только с индексированными таблицами и поиск можно осуществлять только по полям или выражениям над полями, по которым производилось индексирование. Подробнее обиспользовании индексов будет рассказано в следующем разделе.
Определить, найдена ли запись командами LOCATE, CONTINUE или SEEK,можно, если после их выполнения оценить значение, возвращаемое функцией FOUND().
Если функция FOUND () вернула значение True (.Т.), значит, поиск увенчалсяуспехом, если функция FOUND () вернула значение False (.F.) - искомое значение не найдено.
Например, мы решили найти в таблице persons запись о сотруднике с табельным номером 70005. Сделать это можно следующим образом:
Если вы просматриваете таблицу по команде BROWSE и не желаете пользоваться командами Visual FoxPro, можно осуществлять простейший поиск средствами команд основного меню Visual FoxPro. Для такого поиска следует выбрать вменю Edit (Правка) команду Find (Найти). Есть и другой способ, более быстрый, - сочетание клавиш Ctrl+F. Появится диалоговое окно, представленноена рис. 2.19.
В поле Look for (Найти) следует ввести собственно то, что мы хотим найти.Можно вводить и целиком значение искомого поля, и какую-либо часть его.После этого надо щелкнуть мышью по кнопке Find Next (Найти следующее).Указатель установится на запись, в поле которой встретилось первое упоминание введенного вами. Окно поиска при этом останется на месте, не пропадет сэкрана. Если нашлась не та запись, можно продолжить поиск, щелкнув еще разпо кнопке Find Next (Найти следующее).