Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпора по информатике.docx
Скачиваний:
6
Добавлен:
18.09.2019
Размер:
819.82 Кб
Скачать

44 Работа с несколькими базами данных: связь одна запись к одной в foxpro.

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

Возможно установление двух типов связей между записями двух сцепленных БД. Связь типа одна_запись_к_одной перемещает указатель в младшей базе таким образом, что он всегда устанавливается на первую встреченную им запись с совпадающим признаком. Остальные такие записи (если есть) остаются “не замеченными”. Эта связь устанавливается просто командой SET RELATION. Связь типа одна_запись_ко_многим позволяет обратиться ко всем записям младшей базы с совпадающим признаком. Оба типа связей могут быть распространены на несколько баз сразу.

    1. Понятие о рабочих областях

В FoxPro можно обрабатывать сразу несколько файлов БД (до 25). Каждый такой файл типа DBF и все вспомогательные файлы (например, индексные) открываются в своей отдельной рабочей области. Переход из области в область осуществляется командой SELECT <рабочая область>. Первые 10 рабочих областей идентифицируются номерами 1-10 или буквами A – J. Области с 11-й по 25-ю обозначаются номерами или буквенно-цифровыми именами W11 – W25. Если в качестве параметра указать цифру 0, произойдет переход в первую свободную рабочую область.

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

    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 без параметров.