Шаг 68 - Метод CreateRelation

Описание
Создает новый объект 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

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 13.03.2002