MS Access DDL: показывать ссылки на внешние ключи в представлении отношений

Используя объект подключения ADODB, я могу использовать SQL DDL с MS Access (радость!). Странно то, что иногда объявленные ссылки внешнего ключа отображаются в представлении взаимосвязей Access — это было бы здорово для визуализации и распечатки, чтобы показать заинтересованным сторонам, — но иногда это не так. Например, я создаю таблицу «Сотрудники» и таблицу Dep_Policy со ссылкой внешнего ключа на «Сотрудников» (пример из книги Рамакришнана). Это отображается в представлении отношений. Теперь я создаю две новые таблицы, используя один и тот же 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 - это пользовательский класс)


person Christine    schedule 12.10.2011    source источник


Ответы (2)


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

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

person Mike Sherrill 'Cat Recall'    schedule 13.10.2011

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

Короче надо бежать

DoCmd.RunCommand acCmdRelationships
DoCmd.RunCommand acCmdShowAllRelationships

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

person Larry Lustig    schedule 13.10.2011
comment
Странно, что для достижения того же самого нужно использовать эти команды, а не что-то в библиотеках ADO, например. как насчет создания объекта JRO и обновления кеша? - person onedaywhen; 13.10.2011
comment
Что касается вашего прошлогоднего вопроса (странно, я не нашел его, когда пытался выполнить поиск, должно быть, использовал неправильные термины), вы использовали Delphi, но я просто использую MSAccess напрямую. Я не мог найти пункт подменю «Показать все отношения» в жизни, глупый я. - person Christine; 14.10.2011