MS Access DDL: Показать ссылки на внешние ключи в представлении отношений - PullRequest
1 голос
/ 12 октября 2011

Используя объект подключения ADODB, я могу использовать SQL DDL с MS Access (радость!). Странно то, что иногда объявленные ссылки на внешние ключи отображаются в Access Relationship View - это было бы здорово для визуализации и распечатки, чтобы показать заинтересованным сторонам - но иногда это не так. Например, я создаю таблицу Employees и таблицу Dep_Policy со ссылкой на внешний ключ для Employees (пример из книги Рамакришнана). Это показывает в представлении отношений. Теперь я создаю две новые таблицы, используя один и тот же DDL, но в качестве теста меняю имена на Cat и Dog. В режиме "Отношения" показываются только собаки, а не кот Вот код:

Sub createTestSchema()

Dim cnn1 As ADODB.Connection
Dim cmd1 As ADODB.Command

Set cnn1 = CurrentProject.Connection
Set cmd1 = New ADODB.Command

Dim sqlArr As ArrayList
Set sqlArr = New ArrayList
sqlArr.Add ("CREATE TABLE Employees(ssn integer identity(0,1), name text(100), lot     text(50), primary key (ssn))")
sqlArr.Add ("CREATE TABLE Dep_Policy(pname text(20), age integer, cost currency, ssn integer, primary key (pname, ssn)," & _
            "FOREIGN KEY (ssn) references Employees(ssn) ON DELETE CASCADE)")
sqlArr.Add ("CREATE TABLE Cat(ssn integer identity(0,1), name text(100), lot text(50), primary key (ssn))")
sqlArr.Add ("CREATE TABLE Dog(pname text(20), age integer, cost currency, ssn integer, primary key (pname, ssn)," & _
            "FOREIGN KEY (ssn) references Cat(ssn) ON DELETE CASCADE)")
With cmd1
    .ActiveConnection = cnn1
    .CommandType = adCmdText
    Dim i As Integer
    For i = 0 To sqlArr.size - 1
        .CommandText = sqlArr.GetItem(i)
        .Execute
    Next
End With
End Sub

Как убедиться, что ссылки на внешний ключ отображаются в представлении "Связь"? Для этой тестовой схемы большинство таблиц появляется, но в моей реальной схеме появляется мало. Использование MS Access является требованием клиента. (кстати, ArrayList - это пользовательский класс)

Ответы [ 2 ]

1 голос
/ 13 октября 2011

Я задавал этот тот же вопрос здесь, на этот раз в прошлом году.

Вкратце, вы должны запустить

DoCmd.RunCommand acCmdRelationships
DoCmd.RunCommand acCmdShowAllRelationships

в базе данных, чтобы обеспечить обновление диаграммы в соответствии с отношениями, установленными с помощью DDL.

1 голос
/ 13 октября 2011

В более ранних версиях вы щелкали правой кнопкой мыши по рабочему пространству в окне «Отношения» и выбирали «Показать все».

Показ всех таблиц и их взаимосвязей не был (не?) По умолчанию, потому что в базе данных, содержащей 500 таблиц, диаграмма была бы в основном нечитаемой.Фактически, в большинстве баз данных автоматическое отображение всех таблиц и связей создает нечитаемую диаграмму.Чтобы создать удобочитаемую диаграмму, требуется много времени, чтобы перемещать объекты вручную и часто выбирать только тесно связанные части схемы за раз.

...