ВУЗ: Томский государственный университет систем управления и радиоэлектроники
Категория: Учебное пособие
Дисциплина: Базы данных
Добавлен: 28.11.2018
Просмотров: 3111
Скачиваний: 9
21
6.
Написать отчет, в котором описать ход работы.
7.
На проверку присылать файлы отчета, БД и индексные.
Задание
2.
Разработка
программ
локализации
и
поиска
записей
4.1.10 Разработка программных файлов.
Программные файлы (программный файл — это обычный текстовый
файл, каждая строка которого представлена командой FoxPro) можно соз-
давать или модифицировать с помощью встроенного текстового редактора,
вызываемого командой:
MODIFY COMMAND [<file>]
[NOEDIT] [NOWAIT]
[RANGE <expN1>, <expN2>]
[WINDOW <window name1>]
[SAVE]
При создании программного файла по умолчанию присваивается
расширение .prg. Если имя файла не указано, при выполнении команды
создается файл с именем UNTITLED.prg, который в дальнейшем может
быть сохранен под другим именем с помощью опции (пункта) меню Save
as. . . главного меню FILE.
Опция NOEDIT запрещает модификацию текста программного фай-
ла в окне редактирования, допускается только просмотр файла.
Опция NOWAIT позволяет продолжать выполнение программы по-
сле открытия окна редактирования (если опция не указана — выполнение
программы приостанавливается до закрытия окна).
Опция RANGE позволяет открыть окно редактирования, в котором
указанный диапазон символов (<expN1>, <expN2>) уже будет выбран (вы-
делен). Если диапазон не выбирается, курсор остается в позиции <expN1>.
Опция WINDOW <имя окна> — используется для указания имени
окна, которое FoxPro будет использовать для редактирования.
Опция SAVE позволяет сохранить текст на экране после выхода из
окна редактирования. Опция доступна только внутри программы.
В FoxPro можно использовать модульный принцип построения при-
кладных программ, когда законченный прием работы с данными (напри-
мер, поиск информации по определенному условию или организация меню
и т.д.) оформляется как процедура. Поэтому программа обычно состоит из
главной процедуры и вызываемых из нее процедур, например:
< Прикладная программа> && Начало главной процедуры
DO Proc1
DO Proc2
DO Proc3
RETURN && Конец главной процедуры
PROCEDURE Proc1 && Начало Proc1
22
<команды>
RETURN && Конец Proc1
. . .
Таким образом процедура представляет собой программный модуль,
который выполняет определенную задачу. После ее выполнения управле-
ние передается в вызвавшую ее главную процедуру.
Процедура так же, как и программа, вызывается и выполняется ко-
мандой:
DO <имя программы>.
В любой процедуре можно вызвать другие процедуры, формируя,
таким образом, вложенные структуры процедур.
Cледует, однако, избегать рекурсивного вызова процедур, т. е. вызо-
ва из процедуры этой же процедуры. Процедуры можно помещать вместе с
главной процедурой или в отдельный файл процедур.
Размещение процедур в программном файле обеспечивает быстрое
их выполнение, т.к. не требуется открывать и закрывать процедурный
файл и считывать процедуры в оперативную память для выполнения.
В то же время процедуры, которые выполняются только один раз,
занимают оперативную память в течение всего времени выполнения при-
кладной программы. Поэтому целесообразно размещать часто выполняе-
мые процедуры в головной программе, а редко вызываемые — в проце-
дурном файле.
Для доступа к процедурам, размещенным в процедурном файле, не-
обходимо в головной программе использовать команду:
SET PROCEDURE TO <имя процедурного файла>
Каждая процедура, размещаемая в файле процедур либо в программ-
ном файле, должна начинаться с команды:
PROCEDURE <имя процедуры>
и завершаться командой:
RETURN TO MASTER
либо просто
RETURN TO <имя прцедуры>
Опция TO MASTER выполняет возврат в программу высшего уровня
(в DOS либо в систему) в зависимости от того, откуда был осуществлен
вызов процедуры.
Опция TO<имя процедуры> — возвращает управление в активную
процедуру с указанным именем.
4.1.11 Локализация и поиск данных.
При работе с записями файлов базы данных часто бывает полезным
использовать команды поиска нужных записей для вывода на экран либо
принтер не всей информации, а той, которая удовлетворяет некоторому за-
данному значению. Ввод значений переменных с клавиатуры в процессе
23
работы прикладной программы производится командами ACCEPT и
INPUT (в алгоритмах поиска и локализации данных со значениями этих
переменных будут сравниваться значения данных в файле).
ACCEPT применяется для ввода строковых значений, а INPUT —
числовых и логических. Обе команды позволяют вводить текст подсказки,
например:
ACCEPT 'ВВЕДИТЕ СЛОВО' TO x && запомнить строку в перемен-
ную x,
INPUT 'введите число' TO y && ввести число в переменную y;
при этом при вводе строки командой INPUT она должна заключаться в ка-
вычки или апострофы.
Команды поиска записей
КОМАНДА LOCATE
Механизм действия этой команды при поиске записей таков, что по-
следовательно просматриваются все записи до нахождения записи, удовле-
творяющей условию. Таким образом, с помощью этой команды можно
отыскать первую запись, удовлетворяющую условию поиска, для даль-
нейшего просмотра записей с целью нахождения всех записей, удовлетво-
ряющих условию поиска эта команда должна использоваться вместе с ко-
мандой CONTINUE, назначение которой состоит в продолжении поиска
записей, удовлетворяющих поставленному условию.
• LOCATE FOR <условие > [<границы>] [WHILE<условие>]
В случае, если границы и WHILE — условие отсутствуют, поиск ве-
дется во всем файле, начиная с первой записи.
При успешном поиске указатель записей устанавливается на найден-
ную запись, функция RECNO() равна номеру этой записи, а функция
FOUND(), оценивающая результат поиска, возвращает значение .T. («ИС-
ТИНА»).
При неудачном поиске функция RECNO() равна числу записей в базе
плюс одна, FOUND() =.F.
Примеры использования этих команд.
Использование команды LOCATE
*Locate.prg
*поиск с помощью LOCATE
SET TALK OFF
@ 0,0 Clear
ACCEPT 'ВВЕДИТЕ НАЗВАНИЕ' TO otv
USE sk.dbf && Активизируется файл данных sk.dbf, в котором есть
поле kod
LOCATE for kod=otv
* предыдущая строчка содержит условие сравнения с переменной,
24
* которая введена с клавиатуры пользователем
IF EOF() && Если конец файла
? otv+' нет в файле '
ELSE
? kod+STR(power,4,2) && Вывести значения поля kod и
соответствующее ему значение поля power
ENDIF
SET TALK ON
Продолжение поиска
Использование конструкции LOCATE-CONTINUE
* Поиск с помощью конструкции LOCATE CONTINUE
ACCEPT 'ВВЕДИТЕ НАЗВАНИЕ ' to otv
USE sk.dbf
LOCATE for kod=otv
DO WHILE FOUND()
?kod+STR(power,4,2)
CONTINUE
ENDDO
Поиск с помощью SEEK
Этот прием рекомендуется использовать при большом объеме файла,
т.к. применение этой команды обеспечивает ускоренный поиск.
• SEEK <выражение>
Команда применяет специальный алгоритм ускоренного поиска, в
котором база просматривается не сплошь, а в соответствии с информацией,
содержащейся в индексе, т. е. для ее использования необходимо использо-
вать индексный файл. Команда SEEK разыскивает только одну первую за-
пись, в которой в индексном поле наблюдается <выражение>. Пример по-
иска данных с использованием команды Seek
SET TALK OFF
@0,0 clear
ACCEPT 'ВВЕДИТЕ НАЗВАНИЕ ' TO otv
USE sk INDEX skkod
* при использовании команды SEEK файл должен быть проиндексирован
SEEK otv && поиск записи, совпадающей с данными введенными как otv
IF EOF() && если обнаружен конец файла
? otv+'нет в файле' && вывести строку значение otv нет в файле
ELSE
? kod + STR(power,4,2) && str – функция преобразования числового поля в
символьное
ENDIF
SET TALK ON
25
Поиск c помощью команды SET FILTER
Данная конструкция осуществляет фильтрацию данных, по средст-
вам установки FOR-условия для всех без исключения команд обработки
данных. (Например, команда SET FILTER TO fam’ Ив’.) Команда SET
FILTER действует исключительно на ту базу, которая открыта и активна в
данный момент.
SET FILTER TO без параметра снимает все ограничения на предъяв-
ление записей из текущей базы данных.
Установление фильтра имеет особенность: он начинает действовать
только в случае, если после команды SET FILTER TO <условие> произве-
дено хоть какое-то перемещение указателя записей в файле базы данных.
ACCEPT 'ВВЕДИТЕ НАЗВАНИЕ ' TO otv
USE sk.dbf
SET FILTER TO kod=otv
GOTO TOP && Здесь произведено перемещение по базе.
DO WHILE .NOT.EOF()
? kod + STR(power,4,2) && Str-функция преобразования данных типа
число в символьный тип
SKIP
ENDDO
Результаты работы последних двух программ одинаковые. Однако
механизм поиска записей различный. В первой программе команда
LOCATE последовательно пробегает записи с начала файла до нахождения
записи, которая удовлетворяет условию.
Команда CONTINUE также последовательно перебирает последую-
щие записи.
Во второй программе команда GOTO TOP, активизируя фильтр, сра-
зу устанавливает указатель на первую запись, удовлетворяющую условию
фильтрации, команда SKIP пробегает только отфильтрованные записи.
Задание
№
2
лабораторной
работы
№
1
1.
В соответствии с выбранным вариантом реализовать запросы, исполь-
зуя индексный способ поиска. Каждый запрос оформить в виде отдель-
ного программного файла.
2.
Запустить запросы на выполнение. Для каждого запроса вводить раз-
личные значения критериев, которые обеспечивали бы положительный
и отрицательный результаты поиска. В случае отрицательного резуль-
тата должно выводиться соответствующее сообщение.