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

Добавлен: 28.11.2018

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

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

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

 

36

 

 

Рис. 4.25 

 
Для начала в разделе LIST POPUP введем пункты будущего POPUP 

меню. Затем, по аналогии с тригерными кнопками, в разделе <CHOICE...> 
зададим переменную, в которую будет записан номер выбранного пункта. 
С помощью пункта VALID можно задать процедуру обработки выбора. В 
разделе INITIAL зададим стартовое значение меню. 
 

4.3.5 Завершающие манипуляции. 
В  завершении  формирования  экрана  используйте  пункт  меню 

SCREEN/SCREEN LAYOUT  и  в  появившемся  окне  (см.  рис. 4.26) выбе-
рите нужные параметры экрана. 

Установите, будет ли сформированный экран окном (выберите кноп-

ку WINDOW) либо просто экраном (кнопка DESKTOP). 

При выборе типа WINDOW задайте имя (NAME), размер (SIZE), за-

головок (TITLE) и нижнюю надпись (FOOTER) окна. С помощью пункта 
SCREEN CODE можно задать команды, которые будут выполнены перед 
(пункт  SETUP)  и  после  (пункт  CLEANUP & PROCS)  предьявления  сге-
нерированного  экрана.  Это  могут  быть  команды  очистки  экрана,  инициа-
лизации баз данных, индексов, а также команды настроек среды.  

В  разделе  ENVERONMENT  предусмотрена  возможность  сохране-

ния настроек среды. 

В результате проделанной работы должен получиться файл с расши-

рением SCX, в котором хранится образ экрана, а также файл SCT, в кото-
ром хранится состояние среды, открытие баз данных и индексов и т.п. 

Из полученного экрана можно сделать SPR-файл, содержащий про-

грамму на FoxPro, в результате выполнения которой на экране появится соз-
данное окно. Для этого в меню PROGRAM выберите пункт GENERATE


background image

 

37

 

 

Рис. 4.26 

 

Задание

 

на

 

лабораторную

 

работу

 

 3 

 

1.

 

С помощью генератора экранов разработать две формы. 

2.

 

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

3.

 

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

4.

 

В отчете описать ход создания форм и продемонстрировать их рабо-
тоспособность. 

5.

 

На  проверку  выслать  файлы  шаблонов scx, файл .spr, файлы  БД  и 
индексные. 

 

4.4 

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

 

работа

 

 4. 

Одновременная

 

работа

 

с

 

несколькими

 

файлами

 

данных

  

 

Реальные  базы  данных,  как  правило,  состоят  из  нескольких  файлов 

данных.  Часто  информацию,  хранящуюся  в  разных  файлах,  необходимо 
обрабатывать  одновременно.  СУБД FoxPro позволяет  своими  средствами 
проделывать операции, позволяющие устанавливать связь между базами и 
объединять все данные в одну задачу. Особое внимание надо обратить на 
следующие операции: 

 

SET RELATION 


background image

 

38

 

SET VIEW 

 

JOIN WITH и др. 

Прежде чем познакомиться с работой этих команд, необходимо уяс-

нить, что для работы с несколькими файлами данных они должны быть ак-
тивированы  и  помещены  в  отдельной  РАБОЧЕЙ  ОБЛАСТИ.  Всего  рабо-
чих областей может быть 10, и один файл может быть открыт не более чем 
в одной области. 

Выбор/(смена) рабочей области выполняется командой SELECT. 
Рабочие  области  можно  указывать  цифрами 1—10, буквами A—J, 

именем открытого файла данных либо присваивать рабочей области псев-
доним ALIAS-имя.  Присвоение  рабочей  области ALIAS-имени  произво-
дится при открытии файла командой USE, например: 
 
           SELECT 2    && выбрать рабочую область 2; 
        USE spisok INDEX name,group ALIAS f2  && открыть файл в 
                                                 рабочей области 2 и 
                                                присвоить ей псевдоним f2 
 

После  присвоения  файлу  данных  «псевдонима» (alias) обращение  к 

файлу  может  происходить  по  этому  имени.  Если  же  в  команде USE опе-
ранд ALIAS не  указывается,  то  псевдонимом  становится  само  имя  базы 
данных без расширения .dbf. 

В  каждый  момент  времени  активной  может  быть  одна  рабочая  об-

ласть. 

При  переходе  из  одной  рабочей  области  в  другую  (командой 

SELECT) все файлы в них остаются открытыми. Для файлов данных в ка-
ждой рабочей области устанавливается независимый «указатель» текущей 
записи, а при смене активной рабочей области все «указатели» сохраняют 
свои значения.  
 

4.4.1 

Команда

 

манипулирования

 

данными

 SET RELATION 

 

Общий  формат  команды,устанавливающией  связь (RELATION) ме-

жду базами: 

SET RELATION TO [<выражение> INTO<имя базы>]

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

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

разделе (другой рабочей области). 


background image

 

39

Можно указать системе, что при изменении значения указателя запи-

си в текущей базе нужно также изменять указатель записи в базе данных, 
указаной в операнде INTO. Правило для получения нового значения указа-
теля задано в операнде TO в виде выражения. 

Простейшей связью между базами может быть синхронное движение 

указателя  в  обеих  базах.  Для  этого  достаточно  использовать  функцию 
RECNO(). 

SET RELATION TO RECNO () INTO [<имя базы>] 

 Hапример, 

SET RELATION TO RECNO() INTO Spisok 

указывает системе, что при изменении значения указателя в текущей базе 
данных, нужно также изменять указатели записи в базе данных, указанной 
в операнде INTO 

Такой прием возможен лишь для случая, когда количество записей в 

базах данных одинаково. 

Как  видно,  в  приведенной  команде  отсутствует  ссылка [<выраже-

ние>], так как «склеивание « баз происходит последовательно запись за за-
писью. 

В  общем  случае,  когда  количество  записей  в  базах  не  обязательно 

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

Hапример,  вы  имеете  две  базы  данных SPISOK и GRUPA, которые 

содержат  общее  поле  фамилии  студентов NAME. Поэтому  лучше,  чтобы 
при  переходе  в  базе SPISOK от  одной  фамилии  к  другой  в  базе GRUPA 
осуществлялся поиск записи, имеющей такое же содержание поля NAME. 
 В этом случае мы говорим, что связь между базами осуществляется по по-
лю NAME. 

Система  требует,  чтобы  «сыновняя» /т. е.  активизированная  не  по-

следней/, база данных была индексирована по этому полю. Значит для по-
лучения правильного результата соединения баз надо написать:  
         SELECT 1 
         USE Grupa INDEX Name 
         SELECT 2 
         USE Spisok 
         SET RELATION TO Name INTO Grupa 
         DISPLAY ALL FIELDS Nam, Fam,Grupa.Vozrast,Grupa.Group, 

Как видите, для доступа к полям записей другой (неактивной) рабо-

чей области / в команде DISPLAY / перед именем поля следует указывать 
имя файла и имя поля(Grupa.Vozrast) или, если рабочие области вместо чи-
слового  обозначения (1..10) имеют  символьные  алиасы (a..z), то  можно 
доступ указать <имя рабочей области>.<имя поля> (a.Vozrast). 


background image

 

40

Команда SET RELATION позволяет  установить  взаимосвязь  между 

несколькими  базами  и  просмотреть  интересующие  поля,  которые  указы-
ваются в команде DISPLAY. 

В  нашем  примере  поле Name просматривается  из  файла Spisok, а 

Vozrast  и Group из  файла Grupa,обращение  к  которому  происходит c по-
мощью указания номера рабочей области, в которой он активизирован. 

Hо  команда RELATION создает  временный  экран,  и  не  запоминает 

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

4.4.2 

Команда

 

слияния

 

файлов

 JOIN WITH 

 

Это  более  сложная  команда  манипулирования  данными,  она  дает 

возможность создавать новую базу данных, которая является соединением 
двух имеющихся баз или их частей, т. е. она осуществляет слияние «по го-
ризонтали». 
    JOIN WITH <альтернативное имя/ область> TO<имя нового файла>  
     FOR<условие>[FIELDS<список полей>] 

C ее помощью можно объединить путем слияния две открытые базы 

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

Если  список  полей  не  задан,  то  вначале  будут  включены  все  поля 

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

Условие FOR используется для того, чтобы при слиянии можно было 

варьировать  условием включения записей. 

Порядок работы этой команды такой: 
1.  Выбирается  запись  из  активной  базы  данных.  За  ней  включаются 

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

2. После этого извлекается следующая запись из активной базы дан-

ных и процесс повторяется. 

Таким образом, после операнда FOR указывается так называемое по-

ле подбора.  
 

Пример программы:      
Пусть требуется из файлов KADR.DBF и BRIG1.DBF создать третий 

файл,  который  будет  содержать  поля FAM (фамилия)  и TAB (табель)  из 
файла KADR.DBF и поле VIR (выработка) из BRIGI.DBF. Новый файл на-
зван KADRVIR.DBF. 
             SELECT a 
             USE  KADR.DBF