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