【问题标题】:MS Access DDL: Show Foreign Key References in Relationship ViewMS Access DDL:在关系视图中显示外键引用
【发布时间】: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 是一个自定义类)

【问题讨论】:

    标签: sql ms-access vba ddl


    【解决方案1】:

    去年这个时候我在这里问过这个same question

    简而言之,你必须运行

    DoCmd.RunCommand acCmdRelationships
    DoCmd.RunCommand acCmdShowAllRelationships
    

    在数据库中确保图表根据您通过 DDL 建立的关系进行更新。

    【讨论】:

    • 奇怪的是一个必须使用这些命令,而不是 ADO 库中的某些东西来实现相同的功能,例如创建一个 JRO 对象并刷新缓存怎么样?
    • 您去年提出的问题(奇怪的是我在尝试搜索时没有找到它,一定是使用了错误的术语),您使用的是 Delphi,但我只是直接使用 MSAccess。我一辈子都找不到“显示所有关系”子菜单选项,真傻。
    【解决方案2】:

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

    显示所有表及其关系不是(不是吗?)默认设置,因为在有 500 个表的数据库中,图表几乎不可读。事实上,在大多数数据库中,自动显示所有表和关系会导致图表不可读。需要手动移动一些东西,并且通常一次只选择模式中密切相关的部分,才能制作出可读的图表。

    【讨论】:

      猜你喜欢
      • 2011-12-12
      • 1970-01-01
      • 1970-01-01
      • 2010-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多