Используя объект подключения 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 - это пользовательский класс)