分享

关系的查看,删除,创建

 comeonwyj 2015-10-27

相对来说删除关系更加容易,只要用

DAO.Database.Relations.Delete 关系名称

 

就可以了,代码如下:

--===========================================================
-- 过程及函数名:  DelAllRelations
-- 版本号      :  --
-- 说明        :  本过程用于删除当前数据库中的所有关系
-- 引用        :  Micrsoft DAO 3.6 Object Library
--                 以上版本
-- 输入参数    :  --
-- 输出值      :  --
-- 返回值      :  --
-- 调用演示    :  DelAllRelations
--                 在Access2003中按ALT+F11键转到VBE界面,菜单,
--                 插入,模块,将本段代码复制进代码编辑界面,
--                 将光标点击到Public Function处,按F5键运行,
--                 在立即窗口可以看到打印结果。
-- 最后修改日期:  2010-1-27 19:45:00
-- 示例地址    :  http:///?kbid;72FABF1E10DCEEF3
-- 作者        :  cg1
-- 网站        :  http://
-- 电子邮件    :  access911@gmail.com
-- 版权        :  作者保留一切权力,
--                 请在公布本代码时将本段说明一起公布,谢谢!
--===========================================================
Public Function DelAllRelations()
    Dim db As dao.Database
    Dim rel As dao.Relation
    Dim i As Long
   
    Set db = CurrentDb
    --列出所有的关系及关系的其他信息
    For Each rel In db.Relations
        Debug.Print rel.Name
        --用DDL语句,通过删除索引来删除相关的关系。但是建立在QueryDef对象上的关系不能用以下语句删除
        --strSql = "ALTER TABLE [" & rel.ForeignTable & "] DROP CONSTRAINT [" & rel.Name & "]"
        --Debug.Print strSql
        --CurrentProject.Connection.Execute strSql
    Next
   
    --注意不要在 For each 中用 db.Relations.Delete 来删除关系,因为涉及到一个枚举内容
    --随删除的操作而变化的问题,不能一次删除干净
    For i = db.Relations.Count - 1 To 0 Step -1
        db.Relations.Delete db.Relations(i).Name
    Next
   
End Function

--===========================================================
-- 过程及函数名:  ListAllRelations
-- 版本号      :  --
-- 说明        :  本过程可以将所有“关系”信息打印到“立即窗口”
-- 引用        :  Micrsoft DAO 3.6 Object Library
--                 以上版本
-- 输入参数    :  --
-- 输出值      :  --
-- 返回值      :  --
-- 调用演示    :  ListAllRelations
--                 在Access2003中按ALT+F11键转到VBE界面,菜单,
--                 插入,模块,将本段代码复制进代码编辑界面,
--                 将光标点击到Public Function处,按F5键运行,
--                 在立即窗口可以看到打印结果。
-- 最后修改日期:  2010-1-27 19:45:00
-- 示例地址    :  http:///?kbid;72FABF1E10DCEEF3
-- 作者        :  cg1
-- 网站        :  http://
-- 电子邮件    :  access911@gmail.com
-- 版权        :  作者保留一切权力,
--                 请在公布本代码时将本段说明一起公布,谢谢!
--===========================================================
Public Function ListAllRelations()
    Dim tbl As dao.TableDef
    Dim db As dao.Database
    Dim pro As dao.Property
    Set db = CurrentDb
    Dim strSql As String
    Dim qry As dao.QueryDef
   
    Dim idx As dao.Index
    For Each tbl In db.TableDefs
        If tbl.Attributes = 0 Then
            For Each idx In tbl.Indexes
                --打印出所有的索引名称,可以和后面的关系名称对比一下
                Debug.Print "index name ", idx.Name
            Next
        End If
    Next
   

    Dim rel As dao.Relation
    --列出所有的关系及关系的其他信息
    For Each rel In db.Relations
        Debug.Print rel.Name, rel.ForeignTable, rel.Table
        Debug.Print rel.Properties.Count
        Debug.Print rel.Attributes
        Debug.Print "Relation.Attributes :", dbRelationUnique, dbRelationDontEnforce, _
                    dbRelationInherited, dbRelationUpdateCascade, dbRelationDeleteCascade, _
                    dbRelationLeft, dbRelationRight
        -- 1             2             4             256           4096          16777216      33554432
        db.Relations.Delete rel.Name
       
        For Each pro In rel.Properties
            Debug.Print pro.Name
        Next
       
        --strSql = "ALTER TABLE [" & rel.ForeignTable & "] DROP CONSTRAINT [" & rel.Name & "]"
        --Debug.Print strSql
        --CurrentProject.Connection.Execute strSql
    Next
   
   
End Function
 

 


ADO方法:
另外,如果你知道表名比如 table4 中的 id 外键参照 table3 主的主键 id 字段,
则可以通过如下SQL语句得到constrant name
SQL code
select distinct szRelationship
from MSysRelationships
where szObject=--Table4--
and szReferencedObject=--Table3--
然后也可以用DDL语句来进行删除。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多