Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
59
Добавлен:
30.05.2015
Размер:
110.08 Кб
Скачать

4.8 Работа с несколькими бд

В FoxPro можно обрабатывать сразу несколько файлов БД (до 25). Каждый такой файл типа DBF и все вспомогательные файлы (например, индексные) открываются в своей отдельной рабочей области.

Переход из области в область осуществляется командой

SELECT <рабочая область>

Первые 10 рабочих областей идентифицируются номерами 1-10 или буквами A – J. Области с 11-й по 25-ю обозначаются номерами или буквенно-цифровыми именами W11 – W25. Если в качестве параметра указать цифру 0, произойдет переход в первую свободную рабочую область.

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

Одновременно в одной команде можно иметь доступ к полям других баз. В этом случае имя поля из неактивной области – составное. Собственно имени поля тогда предшествует имя рабочей области, разделенные знаками “->” или (что более удобно) точкой: A->name или A.name . При входе в СУБД активизируется область 1 (или А), и, если Вы работаете только с одной базой, заботиться об открытии областей не нужно.

В FoxPro допускается работа сразу с многими базами данных и при этом возможно установление разнообразных связей между ними. Указатель записей в таких связанных базах будут двигаться синхронно. База, в которой указатель движется произвольно, читается старшей, а база/базы, в которой указатель следует за указателем старшей базы, – младшей. В старшей и младшей базах должны быть поля, несущие какой-то общий признак, иначе связь будет бессмысленной.

Возможно установление двух типов связей между записями двух сцепленных БД:

  1. Связь типа одна_запись_к_одной перемещает указатель в младшей базе таким образом, что он всегда устанавливается на первую встреченную им запись с совпадающим признаком. Остальные такие записи (если есть) остаются “не замеченными”.

  2. Связь типа одна_запись_ко_многим позволяет обратиться ко всем записям младшей базы с совпадающим признаком. Оба типа связей могут быть распространены на несколько баз сразу.

4.8.1 Связь вида одна_запись_к_одной

SET RELATION TO ... связывает указатель записей в активной рабочей области с указателями записей из других рабочих областей, имена которых указаны после слова INTO, по заданному общему полю (ключу). Записи в этом поле должны быть уникальны. Файл БД, с которым устанавливается связь, должен быть проиндексирован по этому общему полю.

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

П р и м е р:

SELECT a

USE brig1

SELECT b

USE kadr

INDEX ON tab TO kadrtab && (проиндексировать активную БД по полю tab, создать файл kadrtab.idx)

SELECT a

SET RELATION TO tab INTO b && (установить связь по полю tab с рабочей областью b)

LIST tab, vir, b.fam

Здесь выводятся записи файла brig1.dbf, в которые включено поле соответствующих им фамилий kadr.dbf (b.fam). Связь между всеми файлами разрывается командой SET RELATION TO без параметров.

Отмена связи: SET RELATION без параметров.