Файл: Базы данных УМП-2.pdf

Добавлен: 28.11.2018

Просмотров: 2810

Скачиваний: 9

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

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 


background image

 

22

   <команды> 
   RETURN     && Конец Proc1 
   . . . 

Таким образом процедура представляет собой программный модуль, 

который  выполняет  определенную  задачу.  После  ее  выполнения  управле-
ние передается в вызвавшую ее главную процедуру. 

Процедура  так  же,  как  и  программа,  вызывается  и  выполняется  ко-

мандой: 

DO <имя программы>. 

В  любой  процедуре  можно  вызвать  другие  процедуры,  формируя, 

таким образом, вложенные структуры процедур. 

Cледует, однако, избегать рекурсивного вызова процедур, т. е. вызо-

ва из процедуры этой же процедуры. Процедуры можно помещать вместе с 
главной процедурой или в отдельный файл процедур. 

Размещение  процедур  в  программном  файле  обеспечивает  быстрое 

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

В  то  же  время  процедуры,  которые  выполняются  только  один  раз, 

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

Для доступа к процедурам, размещенным в процедурном файле, не-

обходимо в головной программе использовать команду: 

SET PROCEDURE TO <имя процедурного файла> 

Каждая процедура, размещаемая в файле процедур либо в программ-

ном файле, должна начинаться с команды: 

PROCEDURE <имя процедуры> 

и завершаться командой: 

RETURN TO MASTER 

либо просто  

RETURN TO <имя прцедуры> 

Опция TO MASTER выполняет возврат в программу высшего уровня 

(в DOS либо  в  систему)  в  зависимости  от  того,  откуда  был  осуществлен 
вызов процедуры. 

Опция TO<имя  процедуры> — возвращает  управление  в  активную 

процедуру с указанным именем.  

 
 4.1.11 Локализация и поиск данных. 
При работе с записями файлов базы данных часто бывает полезным 

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


background image

 

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    

* предыдущая  строчка  содержит условие сравнения с переменной,   


background image

 

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 


background image

 

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.

 

Запустить  запросы  на  выполнение.  Для  каждого  запроса  вводить  раз-

личные значения критериев, которые обеспечивали бы положительный 
и отрицательный результаты поиска. В случае отрицательного резуль-
тата должно выводиться соответствующее сообщение.