MS Access DDL:在关系视图中显示外键引用

时间:2011-10-12 18:33:28

标签: sql ms-access vba ddl

使用ADODB连接对象,我可以将SQL DDL与MS Access一起使用(快乐!)。奇怪的是,有时声明的外键引用出现在Access的“关系视图”中 - 这对于可视化非常有用,并且可以打印出来以显示利益相关者 - 但有时却没有。例如,我创建了一个Employees表,以及一个Deppaolicy表,其中包含对Employees的外键引用(例如来自Ramakrishnan的书)。这显示在关系视图中。我现在使用相同的DDL创建两个新表,但将名称更改为Cat和Dog,作为测试。只有Dog显示在Relationship视图中,而不是Cat。这是代码:

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 个答案:

答案 0 :(得分:1)

在早期版本中,您右键单击“关系”窗口中的工作区,然后选择“全部显示”。

显示所有表及其关系不是(不是?)的默认值,因为在具有500个表的数据库中,该图几乎是不可读的。实际上,在大多数数据库中,自动显示所有表和关系会产生一个不可读的图表。它需要手动移动一些东西,并且通常一次只选择模式中密切相关的部分,以制作可读的图表。

答案 1 :(得分:1)

去年这个时候我问过same question

简而言之,您必须运行

DoCmd.RunCommand acCmdRelationships
DoCmd.RunCommand acCmdShowAllRelationships

在数据库中,以确保使用您通过DDL建立的关系更新图表。