MS Access - отношения - PullRequest
       302

MS Access - отношения

1 голос
/ 18 августа 2011

Я унаследовал проект в Microsoft Access 2000, в котором есть код, таблицы и запросы.Мне нужно преобразовать это в SQL.

Я вижу несколько запросов с INNER JOINS с помощью команд Select.Я предполагаю, что в таблицах настроены отношения?

Я использовал инструменты Отношений (Графический инструмент) и добавил все таблицы.Отношения не обнаруживаются.

Как настроены отношения?Как получить отношения, которые были установлены?

Ответы [ 2 ]

1 голос
/ 19 августа 2011

Механизм базы данных будет принимать операторы JOIN независимо от того, были ли определены связи для объединенных таблиц. Таким образом, эти запросы INNER JOIN не обязательно означают, что в вашей базе данных определены какие-либо отношения.

Информация об отношениях хранится в скрытых системных таблицах, MSysObjects и MSysRelationships. Вы можете использовать коллекцию связей базы данных для просмотра этой информации.

Public Sub InspectRelations()
    Dim rel As DAO.Relation
    Dim fld As DAO.Field
    For Each rel In CurrentDb.Relations
        Debug.Print "Relationship Name: " & rel.name
        If rel.Attributes And dbRelationDontEnforce = dbRelationDontEnforce Then
            Debug.Print "Relationship not enforced"
        Else
            Debug.Print "Relationship enforced"
        End If
        Debug.Print "Table: " & rel.Table
        Debug.Print "ForeignTable: " & rel.ForeignTable
        For Each fld In rel.Fields
            Debug.Print "Field Name: " & fld.name
            Debug.Print "ForeignName: " & fld.ForeignName
        Next fld
        Debug.Print String(10, "-")
    Next rel
    Set fld = Nothing
    Set rel = Nothing
End Sub

Редактировать : Вы можете проверить атрибуты отношения. Я включил dbRelationDontEnforce в пример. Другие атрибуты, такие как dbRelationDeleteCascade и dbRelationUpdateCascade, могут быть полезны. Посмотрите раздел справки для перечисления RelationAttributeEnum, чтобы увидеть полный список доступных атрибутов.

Edit2 : чтобы использовать код, откройте свою базу данных в Access. Затем используйте сочетание клавиш Ctrl + g, чтобы открыть окно «Немедленно» в редакторе Visual Basic. Затем выберите Insert-> Module в главном меню VBE. Скопируйте код и вставьте его в модуль. Сохраните модуль, либо примите имя (которое будет похоже на «Module1»), а также присвойте ему другое имя, которое более важно для вас ... но не называйте модуль InspectRelations - модуль и процедура имеют разные имена.

Убедитесь, что компилятор принимает код, выбрав Debug-> Compile в главном меню. Поскольку вы используете Access 2000, вам может потребоваться установить ссылку на «Microsoft DAO 3.6 Object Library». Найдите его в списке и поставьте галочку рядом с ним, затем нажмите OK. Затем скомпилируйте снова.

Если он скомпилирован без ошибок, вы можете запустить процедуру, поместив курсор в теле процедуры и нажав F5, чтобы запустить ее. Операторы Debug.Print отправляют свои выходные данные в непосредственное окно.

0 голосов
/ 18 августа 2011

Если инструмент Отношения не использовался для указания отношений и обеспечения ссылочной целостности, вам не повезло, так как вы можете иметь отношения между таблицами без использования инструмента Отношения.

В соединениях показаны первичные ключи / внешние ключи задействованных таблиц, поэтому вам, вероятно, придется перепроектировать отношения из предложений JOIN в запросах.

...