- •6.050604 "Енергомашинобудування"
- •Основні поняття баз даних (бд). Моделі бд.
- •Моделі даних
- •Скбд для пк і їх призначення
- •Термінологія і структура даних в скбд
- •Типи файлів
- •Сруктура команд скбд
- •Команди установок
- •Створення файлу бд
- •3. Команди роботи з бд
- •3.1. Команди відкриття та закриття файлу бд
- •3.2. Команда доповнення бази даних записами
- •3.3. Команди редагування даних
- •3.4. Команди переміщення в бд
- •3.5. Команди перегляду записів
- •3.6. Команди вилучення записів
- •3.7. Команда вставлення записів.
- •3.8. Команда заміни даних
- •4. Упорядкування записів в бд
- •4.1. Сортування бд
- •4.2. Індексування баз даних.
- •Відкриття індексних файлів
- •Керування індексами.
- •Пошук потрібних записів
- •5.1. Фільтрація записів.
- •5.2. Пошук окремого запису в базі даних
- •Прискорений пошук
- •6. Обробка записів бази даних
- •Обчислення підсумків
- •Обчислення середніх значень
- •7. Створення командних файлів
- •Завдання для самостійної роботи.
- •Створити бд заданої структури.
- •Лабораторна робота №1 Тема: Створення файлу бази даних.
- •Лабораторна робота №2 Тема: Створення командних файлів для упорядкування та обробки записів бд
- •Лабораторна робота №3 Тема: Створення командних файлів для пошуку потрібних записів в бд
- •Література
Прискорений пошук
Прискорений пошук виконується тільки для індексованих файлів. Індексний файл не тільки упорядковує базу даних для перегляду, але й прискорює пошук в ній по ключу. Для цього використовується команда:
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( ).
