Поделиться через


Метод 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