以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]级联删除  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=95823)

--  作者:chnfo
--  发布时间:2017/2/6 14:29:00
--  [求助]级联删除
现在有表A和表B,表A的ID与表B的AID是关联的
要求表A增加行时,自动往表B中增加行,且表B的AID = 表A的行的ID

表B中自动增加的行不允许直接删除。
但表A中的行删除时,表B中的自动增加的行可以级联删除。


表A的datacolchanged事件:
select case e.datacol.name
    case "Code"
         dim dr as datarow = datatables("B").find("AID = \'" & e.datarow("ID") & "\'")
         if dr is nothing then 
               dim ar as datarow = datatables("B").addnew
               ar("AID") = e.datarow("ID")
               ar("Auto") = true  \'这是用来标记是否自动增加的
         end if 
end select 


表B的BeforeDeleteDataRow事件
if e.datarow("Auto") = true then 
     e.cancel = true
end if 

但是结果不是我想的这样,实际情况是:
1、表A中的行删除了,但表B中的行并没有级联删除。
2、如果把表B的BeforeDeleteDataRow事件去掉,表A和表B可以做到级联删除,但没有实现表B中自动增加的行不能主动删除的本意。


如何修改呢?
[此贴子已经被作者于2017/2/6 14:30:13编辑过]

--  作者:有点色
--  发布时间:2017/2/6 14:35:00
--  

 级联删除的功能不要勾选。自己做。

 

 在表a的BeforeDeleteDataRow或者DataRowDeleting事件,同时把表B的数据删除不就行了?


--  作者:chnfo
--  发布时间:2017/2/6 14:47:00
--  
我希望做的就是表A中删除,表B就可以级联删除。如果级联删除不要勾选,那就只能手工写了哟。

而且如果在表A中BeforeDeleteDataRow写上代码:
datatables("B").deletefor("AID = \'" & e.datarow("ID") & "\'")
执行时报错:
该行不属于与此关系相同的 DataSet。
这是几个意思?

但是直接在表B中执行删除操作时,自动增加的行不允许删除。

--  作者:有点色
--  发布时间:2017/2/6 14:49:00
--  
不要勾选级联删除。