Лабораторная работа 5

Поиск информации в базах данных. Установка фильтров

Цели работы:

Краткие сведения из теории

Логические выражения

Простое логическое выражение имеет вид:

< Поле> < Оператор сравнения> < Образец> , где

< Поле> – это имя поля в котором будет организован поиск,

< Оператор сравнения> – логические функции (=,<,>,<> и т.д.),

< Образец> – это любое значение из выбранного поля.

Простые логические выражения объединяются в более сложные с помощью логических операций И и ИЛИ.

Например, дана база данных Договор (Dogovor.dbf)

Имя поля

Идентификатор поля

Тип поля

Код договора

Kod_d

numeric

ИНН фирмы

IIN_firm

numeric

Тип договора

Tip_dogov

character

Дата заключения

Data_zak

date

Город заключения

City_zak

character

Дата вступл.в силу

Data_vst

date

Дата окончания

Data_hin

date

Предмет договора

Predmet

character

Стоимость услуг

Price

numeric

Тип расчета

Tip_pric

Character

Примеры запросов к базе данных Договор:

IIN_firm = 5191000555

Kod_d > 27

Kod_d = 30 OR Kod_d = 37 OR Kod_d = 45

Tip_dogov = "Купли и продажи" AND Data_zak > Ctod("27.10.98")

Data_hin < Ctod("03.11.98")

Data_zak > Ctod("01.10.98") AND Data_zak < Ctod("01.11.98")

Tip_dogov = "Купли и продажи" OR Tip_dogov = "Аренда"

Поиск информации

Поиск записи в больших базах путем "листания" очень утомителен и не эффективен. В такой ситуации рекомендуется воспользоваться функцией поиска записи данных или группы записей.

В среде FoxPro существует несколько способов поиска информации:

Стандартный поиск (Locate) - наиболее универсальная команда, которая работает без индексов. В то же время, наличие активного индекса повышает скорость поиска по заданному критерию. При стандартном поиске можно составлять сложные критерии отбора, используя поля всех типов (включая memo). Команда Locate имеет следующий синтаксис:

LOCATE FOR <выражение1> [<диапазон>] [WHILE<выражение2>] ,

где <выражение1(2)> – логическое выражение.

В случае, если границы и WHILE-условие отсутствуют, поиск ведется во всем файле, начиная с первой записи.

Контекстный поиск выполняется для всех типов полей, включая memo. При данном поиске указывается только одно значение, которое необходимо найти из данной таблицы, без задания конкретного поля. Этот поиск неудобен тем, что находит лишь одно конкретно заданное значение.

Быстрый поиск (Seek) является наиболее быстрым, по сравнению с остальными способами. Его можно проводить только в индексированных таблицах баз данных и только в индексированном поле. Данный поиск обрабатывает все поля, кроме memo-полей. Гарантом высокой скорости является способ поиска: FoxPro анализирует содержимое только проиндексированного поля, а не всех полей каждой записи базы данных. Команда быстрого поиска находит 1-ю запись удовлетворяющую условию поиска, если есть другие записи, то в проиндексированной базе данных они будут расположены рядом с 1-ой. Команда Seek имеет следующий синтаксис:

SEEK (<значение>)

Отфильтровать данные – значит скрыть все записи за исключением тех, которые удовлетворяют заданным условиям отбора. Фильтр является наиболее совершенной командой поиска, так как пользователь может задать сложный критерий отбора и в результате получит полную информацию по заданному критерию без всяких лишних записей из данной таблицы. После снятия фильтра все записи базы данных вновь становятся доступными для пользователя. В FoxPro предусмотрена специальная команда вида

SET FILTER TO <выражение>,

где <выражение>логическое выражение.

Работа с индексным фильтром – наиболее мощная возможность отбора записей.

Задание

1. Составьте не менее 10 логических выражений для поиска данных в базе данных (выбор базы данных сделать самостоятельно, по итогам выполнения предыдущих работ).

2. Выполните поиск данных с помощью команды Locate.

  1. Выполните стандартный поиск в индексированной базе данных.
  2. Выполните поиск в индексированной базе данных с помощью команды Seek.
  3. Выполните поиск в связанных базах данных любым из выбранных методов (Locate, Seek).
  4. Выполните контекстный поиск с помощью команды Find.
  5. Выполните поиск с помощью фильтров. Просмотрите результаты.
  6. Установите индексный фильтр. Обратите внимание на то, что индекс и фильтр работают одновременно.
  7. Просмотрите список сгенерированных команд и запишите их себе в тетради с разъяснениями.

Технология работы

Стандартный поиск

Перед тем как начать поиск в первую очередь нужно открыть базу данных и вывести ее на просмотр (рис. 5.1).

Рис. 5.1. Записи базы данных в режиме просмотра

Далее выбрать команду Записьñ Найти... Три точки позади имени директивы свидетельствуют о том, что FoxPro откроет диалоговое окно Найти (рис. 5.2).

Рис. 5.2. Диалоговое окно поиска данных

В данном диалоговом окне устанавливаются критерии поиска, которым должны удовлетворять разыскиваемые записи данных. В распоряжении пользователя имеются три командные кнопки, служащие для определения этих критериев.

При нажатии командной кнопки Диапазон... отрывается диалоговое окно (рис. 5.3).

Рис. 5.3. Определение области поиска

В этом диалоговом окне определяется область базы данных, в которой FoxPro должна проводить поиск. Если поиск необходимо провести по всем записям данных, содержащимся в базе данных, то следует оставить предустановку Все. Можно ограничить зону поиска только записями следующими после текущей, указав при этом число включенных в поиск записей. Для этого нужно нажать селекторную кнопку Следующая и ввести в соседнее поле число сканируемых записей. Если FoxPro должна провести поиск в остатке набора данных (от текущей записи до конца), следует активизировать селекторную кнопку Остаток. Кроме того, FoxPro позволяет найти запись только по ее номеру, без задания критерия отбора. Для перехода на нужную запись пользователь должен выбрать селекторную кнопку Запись и ввести в соседнее поле номер этой записи. Нажатие кнопки ОК завершает определение области, в которой должен проводиться поиск.

С помощью следующей командной кнопки For… диалогового окна Найти устанавливается условие отбора. При нажатии данной кнопки появляется диалоговое окно Конструктор выражения (рис. 5.4).

Рис. 5.4. Описание критериев поиска

В этом окне можно определить условие, которое используется FoxPro для отбора записей данных при поиске.

В центре диалога расположено поле ввода Найти запись FOR:, в которое пользователь вводит логическое выражение. Выражение можно ввести либо прямо с клавиатуры в поле ввода, либо составить, комбинируя элементы расположенных выше списков.

Слева внизу в Редакторе Выражений находятся списки Поля и Переменные. Из этих списков пользователь может выбирать поля и переменные для вставки в формулируемое выражение. Список полей содержит информацию из активной в данный момент базы.

Если параллельно открыто несколько баз данных, то из поля списка Таблица следует выбрать требуемую базу данных и в списке полей будут индицированы содержащиеся в ней поля.

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

В области Функции в верхней части окна находятся четыре поля списков (по четырем типам данных): Строковые, Логические, Математические, Даты/времени. Каждый из этих списков открывается щелчком мыши на манипуляторе открытия, расположенном справа от списка. В развернутом списке приведены все константы, функции и операторы соответствующего типа данных.

Если выполнить щелчок мышью на элементе списка, он будет принят в поле ввода, причем именно в ту позицию, где в данный момент находится текстовый курсор.

Итак, при составлении критерия поиска, пользователь вначале выбирает нужную базу данных, из нее – поле, которое будет анализироваться при поиске. Далее выбирает из списка логических функций оператор сравнения, после которого набирает с клавиатуры значение поиска.

Используя командную кнопку Проверить, можно проверить синтаксис введенного выражения. Если ошибки в синтаксисе не найдены, пользователь получит в информационной строке в нижней части окна программы FoxPro следующее сообщение: Выражение ошибок не содержит. В противном случае откроется окно ошибок с сообщением: Синтаксическая ошибка.

Если нажать кнопку ОК, выражение будет проверяться автоматически. Пользователь может покинуть Редактор Выражений при условии, что выражение не содержит ошибок.

При закрытии Конструктора Выражений, пользователь возвращается к исходному диалоговому окну Найти. Щелчок на командной кнопке Найти, запускает процесс поиска данных. FoxPro останавливается на первой записи данных, удовлетворяющей критерию поиска, и устанавливает на неё курсор.

С помощью директивы Записьñ Продолжить (Continue) в поиск можно продолжить для нахождения и других записей данных, отвечающих критериям поиска.

Быстрый поиск

Перед тем, как начать поиск, пользователь должен открыть базу данных и проиндексировать ее по полю, в котором организуется поиск (см. Лабораторную работу 3). После того как индекс объявлен активным (рис. 5.5), базу данных нужно вывести на просмотр в табличном режиме.

Рис. 5.5. Диалоговое окно настройки базы данных

Для задания критерия отбора нужно вызвать команду Записьñ Искать. Данная команда доступна только тогда, когда для базы установлен активный индекс.

FoxPro снова откроет диалоговое окно Конструктор Выражений, но на этот раз с небольшими изменениями (рис. 5.6).

Отличие этого окна от описанного ранее состоит в том, что поле для ввода критерия имеет другой заголовок, указывающий на то, что речь идет о Seek-функции:

Значение для SEEK <expN> (индекс=kodfirm).

Кроме того, представлено поле kodfirm, по которому проиндексирована база данных.

Далее в поле ввода необходимо ввести произвольный номер фирмы, например 103, и нажать командную кнопку ОК. FoxPro перейдет в базе данных к соответствующей записи.

Рис. 5.6. Редактор Выражений для быстрого поиска

Контекстный поиск

При организации контекстного поиска пользователь должен открыть базу данных, вывести ее на просмотр и выбрать команду Правкаñ Найти. Откроется диалоговое окно Найти, в котором нужно указать критерии поиска фрагмента текста (рис. 5.7).

В поле ввода Найти вводится фрагмент текста (можно часть слова), который необходимо найти.

В нижней части диалогового окна Найти расположены три контрольных индикаторов:

  1. Без учета регистра – FoxPro в процессе поиска не различает прописные или строчные литеры. В данном случае литеры а и А одинаковы.
  2. Весь текст – FoxPro проводит поиск от текущей позиции курсора в тексте до конца текста, затем продолжает поиск от начала таблицы до той позиции курсора, с которой поиск начинался.
  3. Целое слово – FoxPro ищет только целые слова, но не отдельные фрагменты составных слов.

Рис. 5.7. Задание контекстного поиска

Фильтрация данных

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

Для установки фильтра нужно открыть базу данных и вызвать команду Базаñ Настройка. FoxPro активизирует диалоговое окно Настройка базы (рис. 5.5), где располагается командная кнопка Фильтр.... При нажатии данной кнопки открывается Конструктор Выражений, где в поле ввода Выражение SET FILTER пользователь должен ввести логическое выражение (рис. 5.8)

Рис. 5.8. Определение фильтра

После того, как введен в фильтр критерий отбора, нужно нажать командную кнопку ОК и закрыть диалоговое окно Настройка базы. Выведя базу данных на просмотр, пользователь увидит только записи данных, которые удовлетворяют заданному критерию отбора.

Чтобы отменить фильтр необходимо вернуться через Настройку базы в фильтр и удалить в поле ввода Выражение SET FILTER находящееся там выражение. После чего вновь вывести базу данных на просмотр.

Сохранить фильтры можно в файле окружения VUE. При активном фильтре записи данных можно добавлять, удалять и модифицировать.

Фильтры и индексы

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

В диалоговом окне Индекс располагается командная кнопка Фильтр, с помощью которой открывается диалоговое окно Конструктор Выражений для задания критерия отбора.

Отчет по работе должен содержать:

  1. Описание команд, выражений поиска по всем пунктам работы.

Контрольные вопросы

  1. Достоинства и недостатки метода поиска Locate.
  2. Достоинства и недостатки метода поиска Seek..
  3. Достоинства и недостатки метода поиска Find.
  4. Достоинства и недостатки метода установки фильтров.