Описание
Создает новый объект Relation (только в рабочей области ядра Microsoft Jet).
Set связь = базаДанных.CreateRelation (имя, таблица, внешняяТаблица, атрибуты)
Параметры
связь
Объектная переменная, представляющая создаваемый объект Relation.
базаДанных
Объектная переменная, представляющая объект Database, который используется при создании нового объекта Relation.
имя
Необязательный. Выражение или переменная типа Variant (подтип String), содержащая уникальное имя нового объекта Relation. Дополнительные сведения о допустимых именах объекта Relation приведены в разделе для свойства Name.
таблица
Необязательный. Выражение или переменная типа Variant (подтип String), задающая имя главной таблицы связи. Если указанная таблица не существует на момент добавления объекта Relation в семейство, возникает ошибка выполнения.
внешняяТаблица
Необязательный. Выражение или переменная типа Variant (подтип String), задающая имя внешней таблицы связи. Если указанная таблица не существует на момент добавления объекта Relation в семейство, возникает ошибка выполнения.
атрибуты
Необязательный. Константа или комбинация констант, содержащая информацию о типе связи. Дополнительные сведения приведены в разделе для свойства Attributes.
Замечания
Объект Relation передает в ядро базы данных Microsoft Jet описание связи между полями двух объектов TableDef или QueryDef. Пользователь имеет возможность задать с помощью свойства Attributes условия целостности данных.
Если один или несколько необязательных элементов синтаксиса опущены при вызове метода CreateRelation, допускается использование соответствующих инструкций присваивания для задания или изменения значения соответствующего свойства перед добавлением нового объекта в семейство. После добавления нового объекта в семейство ни одно из значений свойств связи изменить нельзя. Дополнительные сведения приведены в разделах, посвященных конкретным свойствам.
Перед вызовом метода Append для объекта Relation, необходимо добавить в семейства соответствующие объекты Field, чтобы определить ключ и внешний ключ в таблицах.
Если аргумент имя указывает на объект, который уже добавлен в семейство, или если имена объектов Field в подчиненном семействе Fields являются недопустимыми, то при вызове метода Append возникает ошибка выполнения.
Не допускается создание или поддержание связи между реплицированной таблицей и локальной таблицей.
Для удаления объекта Relation из семейства Relations следует применить метод Delete к семейству.
Пример
Следующая программа использует метод CreateRelation для создания объекта Relation (связь) между объектом TableDef "Сотрудники" и новым объектом TableDef "Отделы". Данный пример также демонстрирует, как при создании нового объекта Relation создаются все необходимые объекты Index во внешней таблице (объект Index "СотрудникиОтдела" в таблице "Сотрудники").
Sub CreateRelationX() Dim dbsNorthwind As Database Dim tdfEmployees As TableDef Dim tdfNew As TableDef Dim idxNew As Index Dim relNew As Relation Dim idxLoop As Index Set dbsNorthwind = OpenDatabase("Борей.mdb") With dbsNorthwind ' Добавляет новое поле в таблицу "Сотрудники". Set tdfEmployees = .TableDefs!Сотрудники tdfEmployees.Fields.Append _ tdfEmployees.CreateField("КодОтдела", dbInteger, 2) ' Создает новую таблицу "Отделы". Set tdfNew = .CreateTableDef("Отделы") With tdfNew ' Создает и добавляет объекты Field в семейство ' Fields нового объекта TableDef. .Fields.Append .CreateField("КодОтдела", dbInteger, 2) .Fields.Append .CreateField("НазваниеОтдела", dbText, 20) ' Создает объект Index для таблицы "Отделы. Set idxNew = .CreateIndex("ИндексКодОтдела") ' Создает и добавляет объекты Field в семейство ' Fields нового объекта Index. idxNew.Fields.Append idxNew.CreateField("КодОтдела") ' Чтобы входить в связь, индекс в главной таблице ' должен быть уникальным. idxNew.Unique = True .Indexes.Append idxNew End With .TableDefs.Append tdfNew ' Создает объект Relation "СотрудникиОтделы", ' используя при создании связи имена двух таблиц. Set relNew = .CreateRelation("СотрудникиОтделы", tdfNew.Name, tdfEmployees.Name, dbRelationUpdateCascade) ' Создает объект Field для семейства Fields нового объекта ' Relation. Задает значения свойств Name и ForeignName, ' используя имена полей, участвующих в связи. relNew.Fields.Append relNew.CreateField("КодОтдела") relNew.Fields!КодОтдела.ForeignName = "КодОтдела" .Relations.Append relNew ' Печатает отчет. Debug.Print "Свойства связи " & relNew.Name Debug.Print " Таблица = " & relNew.Table Debug.Print " Внешняя таблица = " & _ relNew.ForeignTable Debug.Print "Поля связи " & relNew.Name With relNew.Fields!КодОтдела Debug.Print " " & .Name Debug.Print " Name = " & .Name Debug.Print " ForeignName = " & .ForeignName End With Debug.Print "Индексы в таблице " & tdfEmployees.Name For Each idxLoop In tdfEmployees.Indexes Debug.Print " " & idxLoop.Name & ", Внешняя таблица = " & idxLoop.Foreign Next idxLoop ' Удаляет новые объекты, созданные только для демонстрации. .Relations.Delete relNew.Name .TableDefs.Delete tdfNew.Name tdfEmployees.Fields.Delete "КодОтдела" .Close End With End Sub