主表(query):qry_sqlM 对应的updatesql:upd_sqlM
子表(query):qry_sqlD 对应的updatesql:upd_sqlDupd_sqlM的DeleteSQL中为删除当前主表记录的语句
upd_sqlD的DeleteSQL中为删除当前子表记录的语句现想实现在删除主表记录的时候,自动将对应的子表中的数据也同时删除。
我目前的方法为:在运行过程中,动态修改upd_sqlD的DeleteSQL,令其删除所有与要删除的主表对应的子表记录。遇到的问题是主表的记录可以删除,但子表的不能删除,想不出为什么,特来向各位高手讨教。我的代码如下:
if delete_checkM() =false then Abort;
if delete_checkD() =false then Abort;
/*--------------------------------------------------
获得子表新的DeleteSQL语句,保存到变量s_del_sql_MD中。
此处获得的语句,我用了两种方式,语句正确,但均为得到正确结果:
·第一种:
'delete from 子表 where personID ='''+当前欲删除的人员号码+'''';
·第二种:
'delete from TEMP_D where YGHVVV = :OLD_YGHVVV '
---------------------------------------------------*/
set_sql_delMD(); //将子表的 DeleteSQL 保存起来
s_del_old:=upd_sqlD.DeleteSQL.Text; //修改upd_sqlD的DeleteSQL,并执行删除操作
upd_sqlD.DeleteSQL.Clear;
upd_sqlD.DeleteSQL.add(s_del_sql_MD);
qry_sqlD.Delete; //删除主表的信息
qry_sqlM.Delete; //启用事务 dm_main.db_main.StartTransaction();
try
qry_sqlD.ApplyUpdates();
qry_sqlM.ApplyUpdates();
except
on E:exception do begin
dm_main.db_main.Rollback();
dbexception(E);
end;
end;
dm_main.db_main.Commit();
qry_sqlD.CommitUpdates();
qry_sqlM.CommitUpdates(); //恢复upd_sqlD的DeleteSQL
upd_sqlD.DeleteSQL.Clear;
upd_sqlD.DeleteSQL.add(s_del_old);
请大家帮忙看一下,为什么主表的数据被删除了,而子表的数据没有被删除呢?
另:请大家谈一下对updatesql的看法。updatesql比较适合于哪类操作呢?多谢。
子表(query):qry_sqlD 对应的updatesql:upd_sqlDupd_sqlM的DeleteSQL中为删除当前主表记录的语句
upd_sqlD的DeleteSQL中为删除当前子表记录的语句现想实现在删除主表记录的时候,自动将对应的子表中的数据也同时删除。
我目前的方法为:在运行过程中,动态修改upd_sqlD的DeleteSQL,令其删除所有与要删除的主表对应的子表记录。遇到的问题是主表的记录可以删除,但子表的不能删除,想不出为什么,特来向各位高手讨教。我的代码如下:
if delete_checkM() =false then Abort;
if delete_checkD() =false then Abort;
/*--------------------------------------------------
获得子表新的DeleteSQL语句,保存到变量s_del_sql_MD中。
此处获得的语句,我用了两种方式,语句正确,但均为得到正确结果:
·第一种:
'delete from 子表 where personID ='''+当前欲删除的人员号码+'''';
·第二种:
'delete from TEMP_D where YGHVVV = :OLD_YGHVVV '
---------------------------------------------------*/
set_sql_delMD(); //将子表的 DeleteSQL 保存起来
s_del_old:=upd_sqlD.DeleteSQL.Text; //修改upd_sqlD的DeleteSQL,并执行删除操作
upd_sqlD.DeleteSQL.Clear;
upd_sqlD.DeleteSQL.add(s_del_sql_MD);
qry_sqlD.Delete; //删除主表的信息
qry_sqlM.Delete; //启用事务 dm_main.db_main.StartTransaction();
try
qry_sqlD.ApplyUpdates();
qry_sqlM.ApplyUpdates();
except
on E:exception do begin
dm_main.db_main.Rollback();
dbexception(E);
end;
end;
dm_main.db_main.Commit();
qry_sqlD.CommitUpdates();
qry_sqlM.CommitUpdates(); //恢复upd_sqlD的DeleteSQL
upd_sqlD.DeleteSQL.Clear;
upd_sqlD.DeleteSQL.add(s_del_old);
请大家帮忙看一下,为什么主表的数据被删除了,而子表的数据没有被删除呢?
另:请大家谈一下对updatesql的看法。updatesql比较适合于哪类操作呢?多谢。
解决方案 »
- 求助2次曲线拟合
- 请问大家delphi还有前途吗?
- 用IDHTTP或API从网站获取Peer列表不正常。如何解决?
- 求函数FileTimeToLocalFileTime的详解??
- 为什么我安装了SpreadSheet 1.1.12后以前安装的DevExpressGrid4.5.2不能用了?运行Delphi时出错,该如何解决?
- 关于函数指针
- 關於 crystal report 9的不能根據表裏的數據自動刷新,着急!!高手幫忙
- 高分请教nt域系统下如何使用http代理上ftp
- twebbrowser 里浏览的是框架结构,如何让焦点对到一个特定的框架
- 一个想不通的问题, 为什么有些部件在W2000下面就会出现 kennel32 错误呢?在98/ME下面工作完好不能再好了:(?
- 高分求一函数!!
- direct oracle access4.0
2. 你是用delete from ...语句来做删除的,直接用一个没有连UpdateSQL的Query来做就好了
UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
begin
inherited;
if updatekind=ukdelete then
begin
with qry_temp do
begin
close;
sql.clear;
sql.add('删除子表的语句');
execsql;
close;
end;
end;
end;但加上这段代码后,每当提交的时候,不论是新增、修改,还是删除,都提示table is read only.(若不加这段代码,便没有该问题)
想不明白为什么(在新增或修改的时候,这段代码都不曾被执行过,却依然产生了错误),请大家指点一二。