'=========================================================== ' 过程及函数名: DelAllRelations ' 版本号 : -- ' 说明 : 本过程用于删除当前数据库中的所有关系 ' 引用 : Micrsoft DAO 3.6 Object Library ' 以上版本 ' 输入参数 : -- ' 输出值 : -- ' 返回值 : -- ' 调用演示 : DelAllRelations ' 在Access2003中按ALT+F11键转到VBE界面,菜单, ' 插入,模块,将本段代码复制进代码编辑界面, ' 将光标点击到Public Function处,按F5键运行, ' 在立即窗口可以看到打印结果。 ' 最后修改日期: 2010-1-27 19:45:00 ' 示例地址 : http://access911.net/?kbid;72FABF1E10DCEEF3 ' 作者 : cg1 ' 网站 : http://access911.net ' 电子邮件 : 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://access911.net/?kbid;72FABF1E10DCEEF3 ' 作者 : cg1 ' 网站 : http://access911.net ' 电子邮件 : 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 |