以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  foxtable如何实现数据参照完整性?  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=29567)

--  作者:zpx_2012
--  发布时间:2013/3/9 11:20:00
--  foxtable如何实现数据参照完整性?

如题,

 

如果用SQL数据库设置了表间的关系图,如果主键用了非_Identify的列,则表就不能一次增加多行了,委不方便,

 

如果在foxtable中建立了关联,当要删除主表的行时如果子表有引用到相关数据则不能删除,反之当在子表中增加主表中不存在的关联列时就提示不能增加,必须先在主表增加后才可以,这样的功能要如何才能实现?

 

我现在的作法是删除主表行时或者子表关联列改变时遍历关联,然后得到相应的主表及子表,再查找判断,请问还有没有其他更好的办法?谢谢!


--  作者:程兴刚
--  发布时间:2013/3/9 11:29:00
--  
自己写代码!
--  作者:zpx_2012
--  发布时间:2013/3/9 11:45:00
--  

谢谢程版,但代码怎么写,写在哪里?

 

我是在全局表事件DataColChanging中用了如下代码,但不起作用,请指导,谢谢!

 

\'改变关联子表关联列时检查数据参照完整性.
For Each re As Relation In Relations
    If e.DataTable.Name = re.ChildTable.Name Then  \'如果是关联子表
        If re.RelationPath = RelationPathEnum.None Then  \'如果是无向关联
            If e.DataCol.name = Re.ChildColumn.Name Then  \'如果是关联列
                \'查找关联主表中是否有对应的值,没有则中止改变
                Dim cmd As New SQLCommand
                cmd.C
                cmd.CommandText = "select Count(*) from {"& re.ParentTable.Name &"} where \'" & e.DataCol.name & "\' = \'" & e.DataRow(e.DataCol) & "\'"
                If cmd.ExecuteScalar < 0 Then \'如果主表中不存在此关联列值
                    MessageBox.Show("主键不存在!","提示")
                    e.Cancel = True
                End If
            End If
        End If
    End If
Next

 

 可以了,原来是返了个超级错误,If cmd.ExecuteScalar = 0 Then \'写成<0 了,不知道还有没有更好的办法?


[此贴子已经被作者于2013-3-10 1:10:45编辑过]

--  作者:zpx_2012
--  发布时间:2013/3/9 16:16:00
--  

那是因为是在全局表事件中设置对每一个表都起作用?