Связывание таблиц в Foxpro

Есть в Foxpro такая вещь - командное окно. С его помощью можно сделать абсолютно все, зачастую быстрее и лучше, чем другими способами. К сожалению, получается не так наглядно, да и многое приходится помнить наизусть. Вот к его помощи и придется сейчас прибегнуть.

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

Объяснения получаются длинными, но фактически связь устанавливается двумя командами - set order и set relation. Но даже с учетом открытия таблиц задача решается в пять строчек, которые и показаны не скриншоте.

Ай-ай какая неприятность! Подсветка кода глючит. Имя папки "tables" должно быть черного цвета, как и имя файла. Но оно, увы, совпадает с одним из ключевых слов, а редактор простенький, вот и ошибается. Таких ситуаций лучше избегать, хотя к ошибкам они и не приводят

* открываем таблицы, с индексами, практически вручную
USE tables\fio
USE tables\docum INDEX tables\docum IN 2

* выбираем во второй таблице индекс, по которому устанавливается данная связь
SET ORDER TO TAG pokodu IN 2

* устанавливает связь
SET RELATION TO kod INTO 2

* формируем составную таблицу, часть полей в которой из первой, а часть из второй таблицы
BROWSE FIELDS a.famil,a.name,b.naimen,b.ser_doc

Тут нужны некоторые пояснения:

Состояние базы данных, и даже ее наличие, не имеют значения. Работа ведется только с таблицами.
Таблица FIO открывается в первой рабочей области, поскольку иное не указано. Можно было указать IN 1, но это лишнее.
При открытии таблицы указывается папка, в которой она расположена, поскольку без проекта и базы Фокс ее не найдет
Наличие индекса для первой таблицы не имеет значения. Он влияет только на порядок строк, и для связи не используется.

Для второй таблице IN 2 означает, что она будет открыта в другой рабочей области (второй), чтобы при ее открытии не закрылась первая
И для таблицы, и для индексного файла должна указываться папка, где они расположены
Наличие индекса по ключевому полю для второй таблицы обязательно.
Команда SET RELATION выбирает в индексном файле нужный для связи индекс
Вместо INTO 2 можно было указать имя таблицы - docum, но в примере использован номер рабочей области, где она открыта

Имена полей в составной таблице можно использовать в любом порядке, просто перед полями первой таблицы нужно указывать префикс a., а для полей второй таблицы - префикс b.

В составной таблице для каждой фамилии выводится только первый документ, поскольку установлена связь одна-к-одной. Чтобы увидеть полную картину, нужно установить связь одна-ко-многим

 
К оглавлениюк следующей статье