
- •4.8 Работа с несколькими бд
- •4.8.1 Связь вида одна_запись_к_одной
- •4.8.2 Связь вида одна_запись_ко_многим
- •4.9 Команды ввода-вывода
- •4.10 Работа с переменными
- •Цикл с условием
- •2 Строковые:
- •3 Работа с датами
- •4 Функции преобразования типов
- •5 Получение справочной информации о бд
- •6 Функции манипулирования файлами
- •7 Сортировка данных
- •8 Математическая обработка бд
- •4.12 Разработка программ
- •1) Функции
- •2) Процедуры
- •3) Классы переменных
4.8 Работа с несколькими бд
В FoxPro можно обрабатывать сразу несколько файлов БД (до 25). Каждый такой файл типа DBF и все вспомогательные файлы (например, индексные) открываются в своей отдельной рабочей области.
Переход из области в область осуществляется командой
SELECT <рабочая область>
Первые 10 рабочих областей идентифицируются номерами 1-10 или буквами A – J. Области с 11-й по 25-ю обозначаются номерами или буквенно-цифровыми именами W11 – W25. Если в качестве параметра указать цифру 0, произойдет переход в первую свободную рабочую область.
Область, в которой мы находимся в данный момент, называется активной рабочей областью, и в ней можно работать с находящейся здесь базой данных, используя все допустимые команды системы.
Одновременно в одной команде можно иметь доступ к полям других баз. В этом случае имя поля из неактивной области – составное. Собственно имени поля тогда предшествует имя рабочей области, разделенные знаками “->” или (что более удобно) точкой: A->name или A.name . При входе в СУБД активизируется область 1 (или А), и, если Вы работаете только с одной базой, заботиться об открытии областей не нужно.
В FoxPro допускается работа сразу с многими базами данных и при этом возможно установление разнообразных связей между ними. Указатель записей в таких связанных базах будут двигаться синхронно. База, в которой указатель движется произвольно, читается старшей, а база/базы, в которой указатель следует за указателем старшей базы, – младшей. В старшей и младшей базах должны быть поля, несущие какой-то общий признак, иначе связь будет бессмысленной.
Возможно установление двух типов связей между записями двух сцепленных БД:
Связь типа одна_запись_к_одной перемещает указатель в младшей базе таким образом, что он всегда устанавливается на первую встреченную им запись с совпадающим признаком. Остальные такие записи (если есть) остаются “не замеченными”.
Связь типа одна_запись_ко_многим позволяет обратиться ко всем записям младшей базы с совпадающим признаком. Оба типа связей могут быть распространены на несколько баз сразу.
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 без параметров.