Метод Database.CreateRelation (DAO)
Область применения: Access 2013, Office 2013
Создает объект Relation (только для рабочих областей Microsoft Access). .
Синтаксис
expression . CreateRelation(Name, Table, ForeignTable, Attributes)
выражение: переменная, представляющая объект Database.
Параметры
Имя |
Обязательный/необязательный |
Тип данных |
Описание |
---|---|---|---|
Name |
Необязательно заполнять. |
Variant |
Тип Variant (подтип строки), который однозначно присваивает имя новому объекту Relation. Сведения о допустимых именах связей см. в свойстве Name. |
Table |
Необязательный |
Variant |
Тип Variant (подтип строки), который называет первичную таблицу в отношении. Если таблица не существует перед добавлением объекта Relation , возникает ошибка во время выполнения. |
ForeignTable |
Необязательный |
Variant |
Тип Variant (подтип строки), который называет внешнюю таблицу в отношении. Если таблица не существует перед добавлением объекта Relation , возникает ошибка во время выполнения. |
Attributes |
Необязательно заполнять. |
Variant |
Констант или сочетание констант, содержащих сведения о типе связи. Дополнительные сведения см. в свойстве Attributes . |
Возвращаемое значение
Relation
Замечания
Объект Relation предоставляет ядру СУБД Microsoft Access сведения о связи между полями в двух объектах TableDef или QueryDef . Целостность ссылок можно реализовать с помощью свойства Attributes .
Если при использовании метода CreateRelation не указана одна или несколько необязательных частей, можно использовать соответствующую инструкцию присваивания, чтобы задать или сбросить соответствующее свойство перед добавлением нового объекта в коллекцию. После добавления объекта вы не сможете изменить его параметры свойств. См. разделы для отдельных свойств для получения дополнительных данных.
Прежде чем использовать метод Append к объекту Relation , необходимо добавить соответствующие объекты Field , чтобы определить первичные и внешние таблицы связей.
Если имя ссылается на объект, который уже является членом коллекции, или если имена объектов Field , указанные в подчиненной коллекции Fields , недопустимы, при использовании метода Append возникает ошибка во время выполнения.
Невозможно установить или сохранить связь между реплицированной таблицей и локальной таблицей.
Чтобы удалить объект Relation из коллекции Relations , используйте метод Delete в коллекции.
Пример
В этом примере метод CreateRelation используется для создания отношения между элементом Employees TableDef и новым tableDef с именем Departments. В этом примере также показано, как при создании нового отношения также создаются все необходимые индексы во внешней таблице (индекс DepartmentsEmployees в таблице Employees).
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("Northwind.mdb")
With dbsNorthwind
' Add new field to Employees table.
Set tdfEmployees = .TableDefs!Employees
tdfEmployees.Fields.Append _
tdfEmployees.CreateField("DeptID", dbInteger, 2)
' Create new Departments table.
Set tdfNew = .CreateTableDef("Departments")
With tdfNew
' Create and append Field objects to Fields
' collection of the new TableDef object.
.Fields.Append .CreateField("DeptID", dbInteger, 2)
.Fields.Append .CreateField("DeptName", dbText, 20)
' Create Index object for Departments table.
Set idxNew = .CreateIndex("DeptIDIndex")
' Create and append Field object to Fields
' collection of the new Index object.
idxNew.Fields.Append idxNew.CreateField("DeptID")
' The index in the primary table must be Unique in
' order to be part of a Relation.
idxNew.Unique = True
.Indexes.Append idxNew
End With
.TableDefs.Append tdfNew
' Create EmployeesDepartments Relation object, using
' the names of the two tables in the relation.
Set relNew = .CreateRelation("EmployeesDepartments", _
tdfNew.Name, tdfEmployees.Name, _
dbRelationUpdateCascade)
' Create Field object for the Fields collection of the
' new Relation object. Set the Name and ForeignName
' properties based on the fields to be used for the
' relation.
relNew.Fields.Append relNew.CreateField("DeptID")
relNew.Fields!DeptID.ForeignName = "DeptID"
.Relations.Append relNew
' Print report.
Debug.Print "Properties of " & relNew.Name & _
" Relation"
Debug.Print " Table = " & relNew.Table
Debug.Print " ForeignTable = " & _
relNew.ForeignTable
Debug.Print "Fields of " & relNew.Name & " Relation"
With relNew.Fields!DeptID
Debug.Print " " & .Name
Debug.Print " Name = " & .Name
Debug.Print " ForeignName = " & .ForeignName
End With
Debug.Print "Indexes in " & tdfEmployees.Name & _
" TableDef"
For Each idxLoop In tdfEmployees.Indexes
Debug.Print " " & idxLoop.Name & _
", Foreign = " & idxLoop.Foreign
Next idxLoop
' Delete new objects because this is a demonstration.
.Relations.Delete relNew.Name
.TableDefs.Delete tdfNew.Name
tdfEmployees.Fields.Delete "DeptID"
.Close
End With
End Sub