Лабораторная работа №11.

advertisement
Лабораторная работа № 11. Работа с несколькими БД.
Цель: Научиться работать с несколькими базами данных.
В FoxPro можно обрабатывать сразу несколько баз данных.
Каждый такой файл типа .DBF и все вспомагательные файлы (например,
индексные) открываются в своей отдельной рабочей области.Переход из
области в область осуществляется командой:
SELECT <номер рабочей области/буквенное обозначение
области>
Псевдонимом области по умолчанию является само имя
находящегося в ней файла базы данных.В качестве псевдонима можно
указать и любое другое слово в команде USE. Использование псевдонима
позволяет при работе с разными базами называть их одним именем
(псевдонимом).Это делает программу независимой от имени конкретной
базы.
Область в которой мы находимся в данный момент, называется
активной рабочей областью. Одновременно можно обратиться из активной
рабочей области к полям других баз. В этом случае имя поля из
неактивной области должно быть составным:
<рабочая область>< псевдоним>< имя поля>
или
<рабочая область>< псевдоним>< имя поля>
<Рабочая область> в составном имени может указываться буквой,
именем её базы данных, псевдонимом, но не номером.
Номер может быть указан в команде SELEKT и в функциях.
Ни одно из полей записи базы данных KOLLEK.DBF не
идентифицирует слушателя курсов вполне однозначно, т.е. могут быть
совпадающие фамилии, специальности и т.п.
Введём в структуру записи ещё одно поле – идентификационный
номер слушателя(IDENT). Рассмотрим задачу организации отъезда
слушателей по окончании курсов. База данных будет со держать
информацию о заказанных билетах и выполненных заказах.
Структура этой БД, назовём её ZAKAZ.DBF, следующая:
Содержание
и имя
поля
1.Идентификатор
(IDENT)
2.Дата заезда
(DATAZ)
3.Дата выбытия
(DATAV)
Тип поля
Размерность
Numeric
5
Data
8
Data
8
Длина
дробной
Части
3
4.Вид
транспорта
(TRANS)
5.Наличие
билета
(YESNO)
Character
5
Logical
1
Установим связь между БД вида одна-запись-с-одной.Для этого
файл, с которым устанавливается связь, должен быть проиндексирован по
общему полю-ключу.
Формат команды:
SET RELATION TO <ключ> INTO <область> [,<ключ>
INTO<область>…] [ADDITIV]
Пример.По идентификационному номеру слушателя найти его
фамилию и информацию о наличии билета.
В нашем случае поле-ключ –– это идентификационный номер
слушателя.В основной базе-KOLLEK.DBF ищем по номеру фамилию.
База, с которой устанавливается связь –– ZAKAZ.DBF.
SELE A
USE KOLLEK
&& открытие старшей
базы в обл. А
SELE B
USE ZAKAZ
&& открытие младшей
базы в обл. В
INDEX ON IDENT TO ZAKAZ
* установление связи одна-с- одной базы KOLLEK.DBF с базой
ZAKAZ.DBF
SELE A
SET RELATION TO IDENT INTO B
BROWSE FIELDS A.FAMIL:H = 'Фамилия ', A.IDENT : H =
'Номер ', B.IDENT :; H = 'Номер/Заказ ', B.YESNO : H = ' Взят
билет',B.DATAV : H = 'Дата_отъезда '
SET RELATION TO
&& отмена всех
связей
В FoxPro можно устанавливать связи с несколькими базами
одновременно. Если со старшим файлом, который уже связан с другим,
необходимо связать некоторый третий (четвёртый и т. д.), следует во все
последующие команды SET RELATION включать слово ADDITIVE ,
которое обеспечит сохранение связей, установленных ранее.
Связь вида одна-запись-со-многими. Следующая команда
устанавливает связь такого типа между двумя или несколькими базами
данных:
 SET SKIP TO [<область1>[,<область2>]…]
4
При этом с каждой записью из старшей базы могут быть сцеплены
несколько записей из младшей базы.Связь м.б. установлена сразу с
несколькими младшими базами, находящимися в указанных областях.
Прежде чем использовать команду SET SKIP, необходимо
выполнить начальное сцепление вида одна-запись-с-одной командой SET
RELATION.
Для рассмотрения организации связи одной базы с несколькими по
схеме одна-запись-со-многими, создадим ещё одну базу данных, которая
будет содержать результаты тестирования слушателей курсов по трем
различным направлениям, и поэтому в такой БД одному и тому же
идентификационному номеру будет соответствовать несколько записей.
Структура базы данных, назовём её TEST.DBF, следующая
Имя поля
Тип поля
Размерность
1.Идентификат
ор
IDENT
2.Рез-ат теста
TEST
Numeric
5
Длина дробной
части
––
Numeric
3
––
Пример Требуется для заданного (введённого с клавиатуры)
идентификационного номера и фамилии из базы данных KOLLEK.DBF
предъявить результаты по всем трём тестам из базы TEST.DBF, которая
проиндексирована по полю IDENT.
SELE A
USE KOLLEK.DBF
INDEX ON IDENT TO KOLLEK
SELE B
USE TEST.DBF
INDEX ON IDENT TO TEST
SELE A
SET RELATION TO IDENT INTO B && Установление связи
одна-с-одной
SET SKIP TO B
&& Установление связи
одна-со-многими
NOM=00000
@ 2,2 SAY "Введите нужный идентиф.номер" GET NOM
READ
SEEK NOM
BROWSE
FIELDS
A.FAMIL:H='Фамилия',
A.IDENT:H='Идентифик.',
5
B.TEST:H='Рез-ат 1-го теста', B.TEST:H='Рез-ат 2-го теста'.;
B.TEST:H='Рез-ат 3-го теста'
SET RELATION TO
&& Отмена всех связей
Выполнить самостоятельно
1.Использовать БД Kadr.dbf и БД Sprav.dbf для расчёта почасовой
оплаты труда работника, табельный номер которого и количество
отработанных часов вводятся с клавиатуры.Запись БД Sprav.dbf содержит
два поля – разряд (Razr) и тариф (Tarif), всего 16 записей (по числу
разрядов).На экран вывести фамилию работника, рассчитанную зарплату и
тарифную ставку.
2.Написать программу поиска по введённому табельному номеру
сотрудника в БД Kadr.dbf и вывода из связанной с ней БД Adress.dbf
информации об адресе, по которому проживает сотрудник.
Контрольные вопросы.
1. Объясните понятие –– “Рабочая область”.
2. Какие связи могут быть установлены между файлами баз
данных?
6
Download