Создает Связь между Таблицами типа "один-ко-многим".

SET SKIP TO [TableAlias1 [, TableAlias2] ...]

Параметры

TO TableAlias1[, TableAlias2] ...

Определяет алиасы привязываемых, дочерних таблиц. Данные таблицы привязываются по типу "один-ко-многим "  относительно родителькой таблицы. Для перечисления  алиасов привязываемых таблиц используется запятая. В командах, для которых поддерживается диапазон выполнения (ALL, NEXT),  (DISPLAY, LIST, и другие, аналогичные), записи из родительской таблицы повторяются для соответствующих записей из дочерних таблиц.

Используйте команду SET SKIP TO, без параметров, для обнуления множественной связи между таблицами, для таблицы, открытой в текущей рабочей области. Данная команда обнуляет только "множественную" связь; для разрыва связи типа "один-к-одному"  - используется команда SET RELATION TO (без параметров), выполненная для родительской таблицы.

Expand imageКомментарии

При помощи команды SET RELATION, можно установить связь между таблицами данных, открытыми в различных рабочих областях. При перемещении указателя записи в родительской таблице (главной в связи), перемещается указатель записи в дочерней таблице (зависимой в связи) на первую, соответствующую запись. Реляционное выражение, заданное в команде SET RELATION определяет синхронное перемещение указателей записей в связанных таблицах. Для типа связи "один-к-одному" для каждой записи родительской таблицы находится (устанавливается указатель на) запись из дочерней таблицы.  Если соответствующая запись не найдена, то указатель устанавливается на конец файла, таблицы.

Часто возникают ситуации, когда несколько записей в дочерней таблице соответствуют одной записи родительской таблицы. Команда SET SKIP устанавливает множественное отношение между рассматриваемыми таблицами. Пока указатель записи в родительской таблице остается на месте, указатель записей в дочерней таблице перемещается только в соответствующем диапазоне, ограничен в перемещении. 

Для создания отношения типа "один-ко-многим", сначала установите простое отношение между таблицами, командой SET RELATION. За тем, выполните команду SET SKIP - для преобразования обычного отношения в тип "один-ко-многим".

Expand imageПример

В представленном ниже примере: для каждой записи первой таблицы определяются все соответствующие записи в двух других таблицах. Сначала связываются две дочерние таблицы, в которых одна является дочерней, а другая родительской. При сканировании первой таблицы определяются соответствующие записи во второй таблице, а благодаря второй связи  - определяется запись в третьей таблице. Команда SET SKIP работает для главной родительской таблицы. Установка команды SET SKIP для связи между дочерними таблицами - неэффективна. Благодаря указанному мехзанизму устанавливаются связи для всех соответствующих записей, содержащих необходимые данные. 

  CopyCode imageКопировать Код
CLOSE DATABASES
* Creates parent table with values a and b in Name field
CREATE TABLE Parent FREE (Name C(1), Val C(10))
INSERT INTO Parent VALUES ('a', 'Parent.a1')
INSERT INTO Parent VALUES ('b', 'Parent.b1')

SELECT 0 && Child1 will have two a's and two b's
CREATE TABLE Child1 FREE (Name1 C(1), Val C(10))
INSERT INTO Child1 VALUES ('a', 'Child1.a1')
INSERT INTO Child1 VALUES ('b', 'Child1.b1')
INSERT INTO Child1 VALUES ('b', 'Child1.b2')
INSERT INTO Child1 VALUES ('a', 'Child1.a2')
INDEX ON Name1 TAG tagName && The tag name is irrelevant

SELECT 0 && Child2 will have two a's and two b's
CREATE TABLE Child2 FREE (Name2 C(1), Val C(10))
INSERT INTO Child2 VALUES ('b', 'Child1.b1')
INSERT INTO Child2 VALUES ('b', 'Child1.b2')
INSERT INTO Child2 VALUES ('a', 'Child1.a1')
INSERT INTO Child2 VALUES ('a', 'Child1.a2')
INDEX ON Name2 TAG tagName && The tag name is irrelevant

SELECT Child1
SET RELATION TO Name1 INTO Child2
SELECT Parent
SET RELATION TO Name INTO Child1
SET SKIP TO Child1, Child2 && Parent gets both skips.
&& Otherwise, only four record triplets
&& would be listed.
SCAN ALL && There will be eight triplets: four a's and four b's
? Parent.Val, Child1.Val, Child2.Val
ENDSCAN

Expand imageСм. также