【发布时间】:2011-12-06 09:13:21
【问题描述】:
使用 ADODB 连接对象,我可以将 SQL DDL 与 MS Access 一起使用(快乐!)。奇怪的是,有时声明的外键引用会出现在 Access 的关系视图中——这对于可视化非常有用,并且可以打印出来以显示利益相关者——但有时它不会。例如,我创建了一个Employees 表和一个带有对Employees 的外键引用的Dep_Policy 表(来自Ramakrishnan 书中的示例)。这显示在关系视图中。我现在使用相同的 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 是一个自定义类)
【问题讨论】: