回答

收藏

访问SQL在不强制引用完整性的情况下创建一对多关系

技术问答 技术问答 174 人阅读 | 0 人回复 | 2023-09-14

我有这种关系。我不得不暂时销毁它,只是为了使用它。SQL命令变更 salID字段大小:  P0 Q" n# {7 j4 h8 n9 v# ~
ALTER TABLE Adressen DROP CONSTRAINT [ChildTableMainTable]
9 Y- u# w2 C6 z1 O/ Z8 \0 E: o
如何使用SQL命令重建相同的关系类型?如果我用下一个SQL,会有一对多的关系。这不是我需要的:" `1 X6 w/ a  E+ R( Q
ALTER TABLE MainTable ADD CONSTRAINT [ChildTableMainTable] FOREIGN KEY (salID) REFERENCES [ChildTable] (ChildPK);* a0 b* s$ J' G* W$ z

7 I& L5 i3 s9 i! q7 ^8 _                                                                $ F4 U# L1 A" Z& E! k
    解决方案:                                                               
  ]& }3 O5 G7 S3 g2 |5 {+ a, S; ~                                                                据我所知,Access DDL不支持强制引用完整性Access创造关系。CREATE CONSTRAINT将 使用
6 _  F5 t( ~  e0 ?建立强制引用完整性的关系 ,    因为这是引用完整性的关系 约束    。5 U- q+ n! Q8 D3 y
(ON UPDATE和ON DELETE子句CREATECONSTRAINT控制编辑关系对话框中级联更新相关字段和级联删除相关记录复选框的值,但不控制强制引用完整性复选框本身的值。
$ h# S( |6 R) Q2 A换句话说,没有强制执行参考完整性的关系根本不是约束。通过指定的字段将表连接起来只是一个提示。例如,如果将表添加到查询设计中,查询生成器可以自动连接表。+ Z7 [; b: S% g8 X  L
要建立一种没有强制引用完整性的关系,你需要使用它Access DAO。对于这样的关系
0 T0 |2 {3 w! H2 ]6 G
) V# Z% F+ V$ ^6 n, w9 b  W* U; TVBA所需代码将是1 X' n4 E0 n* a0 j! G, K
Option Compare DatabaseOption ExplicitPublic Sub CreateRelationship(relationshipName As String,_        parentTableName As String,childTableName As String,_        parentTablePkName As String,childTableFkName As String)    Dim cdb As DAO.Database    Set cdb = CurrentDb    Dim rel As DAO.Relation    Set rel = cdb.CreateRelation(relationshipName,parentTableName,_            childTableName,dbRelationDontEnforce)    rel.Fields.Append rel.CreateField(parentTablePkName)  ' parent PK    rel.Fields(parentTablePkName).ForeignName = childTableFkName  ' child FK    cdb.Relations.Append rel    Set rel = Nothing    Set cdb = NothingEnd Sub

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则