Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мет1_FoxPro_2011.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
414.21 Кб
Скачать

Прискорений пошук

Прискорений пошук виконується тільки для індексованих файлів. Індексний файл не тільки упорядковує базу даних для перегляду, але й прискорює пошук в ній по ключу. Для цього використовується команда:

SEEK <вираз>

В команді SEEK значення задається виразом і вона використовується для роботи з числами, датами і тимчасовими змінними.

Наприклад:

SEEK В && Знайти запис ключового поля PRIZV, що

&& починається з літери " В "

SEEK 35 && Знайти запис ключового поля INF2,

&&який дорівнює 35

КР = "Пасько" && Знайти запис ключового поля PRIZV, що

SEEK КР && містить прізвище "Пасько"

SEEK (01⁄01⁄93) && Знайти запис, ключового поля RIKNAR,

&& який збігається із заданою датою(01⁄01⁄93).

Команда SEEK застосовує спеціальний алгоритм прискореного пошуку, в якому база переглядається не повністю, а у відповідності з інформацією, яка міститься в індексі. Пошук здійснюється стрибками (так званий "двійковий пошук"), що забезпечує швидке знаходження номера потрібного запису, який і визначає переміщення покажчика записів до потрібного запису в основному файлі даних.

Команда SEEK знаходить тільки один самий перший запис, в індексному полі якого зустрічається заданий <вираз> і установлює на нього покажчик записів. Проте, оскільки файл даних проіндексовано, то всі наступні записи знаходяться безпосередньо за знайденим. Тому перехід до наступних записів можна здійснити командою SKIP.

Функція FOUND( ) буде повертати значення .Т., якщо запис знайдено і .F. – якщо ні.

Функція RECNO( ) повертає або номер знайденого запису, або число записів в базі плюс одиниця.

Розглянемо приклади . Провести в базі даних SPISOK.DBF пошук запису залікової книжки з номером 11100. Для цього проіндексуємо базу по полю NZAL. Отримаємо індексний файл з іменем SP_ NZAL.IDX.

USE SPISOK.DBF INDEX SP_ NZAL.IDX

SEEK 11100

DISPLAY NZAL, PRIZV, NAME, POBAT, NGRUP

Результат:

Record # NZAL PRIZV NAME POBAT NGRUP

9 11100 Гнатюк Ольга Андреевна ЕN-1-2

Для забезпечення прискореного пошуку по ключу, заданому неточно, використовується спеціальна установка

SET NEAR ON

По замовчуванню - SET NEAR OFF.

Така установка дає можливість в разі невдалого пошуку установити покажчик записів не на кінець файлу, а на близький наступний за значенням ключа запис активної бази.

Нехай, наприклад, у базі даних RETING.DBF треба знайти запис по ключовому полю BMISP бал, який дорівнює 31 . Оскільки пошук такого запису може бути невдалим , тому що ніхто не отримав 31 бал, але є бали близькі до 31. Використавши команду SET NEAR ON покажчик записів буде встановлено на близький наступний запис. Для перегляду бази далі використовують команду BROWSE.

INDEX ON BMISP TO BAL_ BMISP

SET NEAR ON

SEEK 31

BROWSE

Такий механізм пошуку зветься наближеним пошуком.

У FoxPro для індексного пошуку існує спеціальна функція:

SEEK (<вираз> [, < область >]),

яка виконує пошук запису в індексному файлі і встановлює на нього покажчик записів з поверненням значення .Т., якщо пошук вдалий, і .F. , якщо пошук невдалий. Функція SEEK( ) замінює комбінацію команди SEEK і функції FOUND( ).