odac 主细结构中,为什么不能同时在一个事务中删除主细表中的数据?
代码如下:主了表控件为ODAC的TSmartQuery ,实表中只能删除主表数据,而子表实表中数据还在。删除和保存事件如下:
procedure actDeleteExecute(Sender;Tobject)
begin//删除子表数据DetailQuery.Disablecontrols;
try
if not (DetailQuery.eof) then
begin
DetailQuery.First;
while not DetailQuery.eof do
DetailQuery.delete;
end;
finally
DetailQuery.Enablecontrols;
end;//删除主表数据MasterQuery.delete;
end;
procedure actSaveExecute(Sender;Tobject)
begin
orsn.StartTransaction; try
DetailQuery.ApplyUpdates;
MasterQuery.ApplyUpdates;
orsn.Commit;
except
orsn.Rollbach;
end;
end;
代码如下:主了表控件为ODAC的TSmartQuery ,实表中只能删除主表数据,而子表实表中数据还在。删除和保存事件如下:
procedure actDeleteExecute(Sender;Tobject)
begin//删除子表数据DetailQuery.Disablecontrols;
try
if not (DetailQuery.eof) then
begin
DetailQuery.First;
while not DetailQuery.eof do
DetailQuery.delete;
end;
finally
DetailQuery.Enablecontrols;
end;//删除主表数据MasterQuery.delete;
end;
procedure actSaveExecute(Sender;Tobject)
begin
orsn.StartTransaction; try
DetailQuery.ApplyUpdates;
MasterQuery.ApplyUpdates;
orsn.Commit;
except
orsn.Rollbach;
end;
end;
解决方案 »
- delphi adoquery open oracle case 报错
- 200分求中山大学Delphi2005视频教程51讲
- 自定义组件在面板上显示的问题?
- 请教怎样实现图形的无缝平移?
- 请问:如何让用delphi开发的exe程序可以与一个网站通过xml方式进行数据交换?
- 如何在DBGRID自动POST的时候(比如我单击其他行),屏蔽掉数据库的英文错误信息,比如关键字冲突等等,给出中文提示: '出错了!'。在线给分
- 本人需用DELPHI开发基于WEB的一套软件
- 关于数据决策控件的问题
- ADOdataset的locate为什么出错?
- !!!为什么Paradox数据库里不能显示“”(双引号)号呢???
- TListView使用vslist数据无法完整显示
- 如何实现IDTCPClient做的客户端与客户端进行通信?
procedure actSaveExecute(Sender;Tobject)
begin
orsn.StartTransaction; try
orsn.begintrans;
DetailQuery.ApplyUpdates;
MasterQuery.ApplyUpdates;
orsn.Commit;
except
orsn.Rollbach;
end;
end;
begin
orsn.StartTransaction; try
orsn.begintrans;
DetailQuery.ApplyUpdates;
MasterQuery.ApplyUpdates;
orsn.Commit;
except
orsn.Rollback;
end;
end;
"orsn.begintrans;" ODAC 的 TOraSession 无此过程吧,我刚试过。忘记说的是TSmartQuery 用的是 CachedUpdate, 在这种方式中,我想是否会是缓存中当主表记录删除,子表会
因为失去与主表的关联而记录变为空,所以在ApplyUpdates时主表成功而子表无数据提交 。
procedure actSaveExecute(Sender;Tobject)
begin
orsn.StartTransaction; try
orsn.begintrans;
DetailQuery.ApplyUpdates;
orsn.Commit;
MasterQuery.ApplyUpdates;
orsn.Commit;
except
orsn.Rollback;
end;
end;
试验一下
结果还是一样的,我想问题不在Commit,而是在ApplyUpdates前的缓存,在删除事件中,
我//MasterQuery.delete; 就可以删除从表实表中的记录,我想是在DetailQuery.ApplyUpdates中提交删除
SQL时因为MasterQuery中的记录删除而从表无记录可删,所以我在试想,如果缓存在从表删除操作后不做刷新
动作,也许可能可以,但目前没有找到删除后不做刷新的方法。
只要在从表删除后DetailQuery.ApplyUpdates就可以了,这样缓存中就不会没有从表数据了