3个表的删除(100分)

  • 主题发起人 主题发起人 cuba
  • 开始时间 开始时间
C

cuba

Unregistered / Unconfirmed
GUEST, unregistred user!
我用Paradox建立了3个表,
表1:Num,。。。 对应Table1
表2:Num,Time,。。。 对应Table2
表3:Time,。。。 对应Table3
其中相同的字段名表示是关联的关系
为了在删除表1带Num的字段时,将表2,表3相应字段删除,我在Table1的
BeforeDelete事件中加入了:
with Query do
begin
sql.text:='Delete from T2.db where Num= :Num';
ParamByName('Num').Value := DBNum.Text ;
ExecSQL;
end;
其中DBNum.Text为T1.db的Num字段值。这段程序运行正常,当删除表1的记录
时,表2的相应记录也能删除。
同样我在Table2的BEforeDelete事件中也加入了类似的代码,当删除表2的记
录时,表3的相应记录也能删除。
但是,当两段代码一起运行时,当删除表1的记录时,仅仅表2的对应记录删除
了,但表3的对应记录没有删除,这个问题该如何解决?是不是该在Table1的
BeforeDelete事件中些复合SQL语句?
 
肯定不能删除了,你在删除表1之前,应先删除表3,再删除表2,最后才删除表1。
例如(我用的是mssql7):
delete from table3 t3,table2 t2,table1 t1 where t3.time=t2.time and
t2.num=t1.num and t1.num=1

delete from table2 t2,table1 t1 where t2.num=t1.num and t1.num=1

delete from table1 where num=1
 
同意fstao,你在删除表3时已经把表2中对应的字段山除掉了,
当然山不了表3的内容,应该分清先后
 
其实,关键问题在于你删除表1的记录时,由于用SQL语句删除表2的记录,
因此表2的BeforeDelete不会被触发,当然不能完成删除表3的记录.
^^^^^^^^^^^^^^^^^^^^^^
解决办法有很多,比较好的是,Table1的BeforeDelete事件中加入另一条语句:

with Query do
begin
sql.text:='Delete from T3.db where time=(select time from T2.db where num=:num)';
ParamByName('Num').Value := DBNum.Text ;
ExecSQL;

//后面这条仍保留:
sql.text:='Delete from T2.db where Num= :Num';
ParamByName('Num').Value := DBNum.Text ;
ExecSQL;
end;
 
谢谢各位,尤其要谢谢温柔一刀,他所说的正是我想要的
‘表2的BeforeDelete不会被触发’
仍然要谢谢fstao和 xueminliu,一些小分,敬请笑纳:)

 
多人接受答案了。
 

Similar threads

S
回复
0
查看
730
SUNSTONE的Delphi笔记
S
S
回复
0
查看
738
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部