两层结构中关于事务处理的捆扰 100分
MasterDataset:Tadodataset;
DetailDataset:Tadodataset;
Masterdataset对应着主表
DetailDataset对应着子表
Masterdataet,DetailDataset的LockType为ltBatchOptimistic,其他的均为默认设置
以下代码:
Connection.BeginTrans;;
try
Masterdataset.UpdateBatch(arall);
DetailDataset.UpdateBatch(arall);
Connection.CommitTrans;
except
Connection.RollbackTrans;
end;
当DetailDataset的数据违反主键约束。为什么保存发生错误时没有发生事务的回滚呢。
也就是说Masterdataset和Detaildataset中的一部分数据被保存进了数据库,百思不得其解。
个人感觉这里的事务控制好象根本没有起作用一样,如同空设;
请大虾指教。
问题点数:0、回复次数:35Top
1 楼skm(藍白紅)回复于 2004-04-04 13:13:05 得分 0
我也想知道
up,没试过Top
2 楼Risk_lee(■自己开公司■)回复于 2004-04-04 13:41:20 得分 0
UpTop
3 楼Risk_lee(■自己开公司■)回复于 2004-04-04 22:46:07 得分 0
upTop
4 楼Risk_lee(■自己开公司■)回复于 2004-04-05 18:04:56 得分 0
帮帮忙啊
Top
5 楼jiangshi99(僵尸先生99)回复于 2004-04-05 18:33:46 得分 0
顶Top
6 楼DragonBill(用户中文昵称------静观其变,以静制动)回复于 2004-04-05 18:58:30 得分 0
在beforepost中写下dataset1.begintrans
在afterpost中写下dataset1.committrans
再试试看Top
7 楼greenpeople(绿人)回复于 2004-04-05 19:01:00 得分 0
顶Top
8 楼Risk_lee(■自己开公司■)回复于 2004-04-06 00:50:44 得分 0
在beforepost中写下dataset1.begintrans
在afterpost中写下dataset1.committrans
再试试看
------------------------
to DragonBill
请问
Connection.BeginTrans;;
try
..............
Connection.CommitTrans;
except
Connection.RollbackTrans;
end;
还要吗?
请继续解答Top
9 楼8341(八三四一)回复于 2004-04-06 07:51:02 得分 0
不对啊,应该这样吧:
Connection.BeginTrans;
try
Masterdataset.UpdateBatch(arall);
DetailDataset.UpdateBatch(arall);
except
Connection.RollbackTrans;
exit;
end;
Connection.CommitTrans;
如果把Connection.CommitTrans;放在exceppt前面,那不是不管怎样都提交了嘛。
Top
10 楼Risk_lee(■自己开公司■)回复于 2004-04-09 17:51:05 得分 0
以上的回答都不对。还望大虾门帮帮忙。这么多天了,还没解决。不会是很难吧。分不够,可另外再给。Top
11 楼Risk_lee(■自己开公司■)回复于 2004-04-09 17:51:39 得分 0
up有分Top
12 楼Risk_lee(■自己开公司■)回复于 2004-04-09 17:53:26 得分 0
to: 8341(八三四一)
8341还要继续努力啊。Top
13 楼8341(八三四一)回复于 2004-04-12 10:52:58 得分 0
不会吧,按我的说法难道还会出错?Top
14 楼noproblem12(被捡破烂的捡起的破烂)回复于 2004-04-12 11:50:03 得分 0
hehe,8341 要努力啊
Connection.BeginTrans;
try
Masterdataset.UpdateBatch(arall);
DetailDataset.UpdateBatch(arall);
Connection.CommitTrans;
except
Connection.RollbackTrans;
exit;
end;
Top
15 楼hhzqf1980(hh)回复于 2004-04-12 11:54:45 得分 0
dm.adoconnection1.BeginTrans;
try
BEGIN
dm.adoconnection1.CommitTrans;
except
dm.adoconnection1.RollbackTrans;
end;Top
16 楼bxh2dai(希望明天会有些改变)回复于 2004-04-12 12:21:17 得分 0
顶Top
17 楼Risk_lee(■自己开公司■)回复于 2004-04-12 12:24:43 得分 0
难道这是一个世纪难题吗,这么多人都不会,分不够可另外给Top
18 楼Risk_lee(■自己开公司■)回复于 2004-04-12 17:56:58 得分 0
upTop
19 楼eboywy(飞影)回复于 2004-04-12 18:18:08 得分 0
UP可能没有运行except那段代码吧。。你跟踪一下确认。。Top
20 楼alphax(豪言壮语的乌鸦)回复于 2004-04-12 18:19:56 得分 0
不懂ADO
想问问,Masterdataset和DetailDataset的Connection是同一个吗?Top
21 楼Tensionli()回复于 2004-04-12 18:38:56 得分 0
upTop
22 楼Risk_lee(■自己开公司■)回复于 2004-04-13 12:12:03 得分 0
不懂ADO
想问问,Masterdataset和DetailDataset的Connection是同一个吗?
-----------------------
是的Top
23 楼delphi_xizhousheng(西周生)回复于 2004-04-13 12:36:49 得分 0
分别看下Masterdataset和Detaildataset的相关事件中有没有做特别的处理 比如OnPostError中.....
最好是单步跟踪看看有没有,看看保存主表数据是不是 执行connection1.CommitTrans,导致的Top
24 楼Risk_lee(■自己开公司■)回复于 2004-04-14 12:00:43 得分 0
本人觉得好象是Delphi的问题,我觉得我的代码不应该有错Top
25 楼alphax(豪言壮语的乌鸦)回复于 2004-04-14 12:15:03 得分 0
我虽然不懂ADO,不过用ADO的人多了,而且Master/Detail都是很基本的东西了
先怀疑自己的代码吧Top
26 楼delphi_xizhousheng(西周生)回复于 2004-04-14 12:23:24 得分 0
先找出POST数据库的所有的可能 然后再逐一分析Top
27 楼henreash(虫子)回复于 2004-04-14 14:00:39 得分 0
你用SQL语言操作数据库试试吧。不要用Delphi的东西向数据库里写东东(速度慢)。Top
28 楼Risk_lee(■自己开公司■)回复于 2004-04-23 21:11:07 得分 0
我觉得是Delphi的问题,我把自己的代码问过一些很有经验的人,他们都不知道是什么回事。现在我写一个控件,是把改变的数据变成SQL直接操作数据库的,完成后,我告诉大家。Top
29 楼wuqing0530(andy)回复于 2004-04-24 11:00:08 得分 0
先更新子表,再更新从表Top
30 楼zfang(真爱无敌)回复于 2004-04-24 11:22:25 得分 0
事务处理格式如下:
begintrains;
try
.....
Execsql;
if errors.count = 0 then
committrains
else
rollbacktrains;
excetp
rollbacktrains;
end;Top
31 楼zfang(真爱无敌)回复于 2004-04-24 11:24:21 得分 0
有时,execsql执行的时候,有些错误是无法扑捉到的,so用errors.count来扑捉!Top
32 楼rockswj(石头,一直再努力)回复于 2004-04-24 12:34:41 得分 0
缓存模式的确有很多不好控制的地方。但是对于事务是起作用的。
如果主键重复触发异常,会回滚的。如果主表有多个记录,移动记录,不符合条件的会被过滤掉。这样符合条件的再次提交会到库里面Top
33 楼Risk_lee(■自己开公司■)回复于 2004-04-24 21:49:02 得分 0
可问题TMD的,他就是第一次回滚,第二次就不回滚了。好奇怪啊。没有主键冲突的被保存进去了,有冲突的没有被保存进去。我现在都不打算使用控件的方法了,我自己用SQL进行处理。Top
34 楼skm(藍白紅)回复于 2004-05-02 03:44:57 得分 0
:(Top
35 楼chinaren502(星星知我心)回复于 2004-05-02 03:56:16 得分 0
楼主5、1快乐!
大家也快乐!同乐~
我接点分:)
Top




