CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  数据库相关

两层结构中关于事务处理的捆扰 100分

楼主Risk_lee(■自己开公司■)2004-04-04 05:30:23 在 Delphi / 数据库相关 提问

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

相关问题

  • 事务处理
  • 事务处理
  • *************三层结构中,怎样进行对多个表操作的事务处理?*************
  • 100分求教:三层结构中的客户端怎样做事务处理?
  • Db2 事务处理
  • Db2 事务处理
  • 一个事务处理的问题:将两层结构的事务转换到三层结构!
  • 请问事务处理能针对建表操作和修改表结构的操作吗?
  • 请问SYBASE里的事务处理中能不能包括建表、删表、修改表结构操作呀?
  • 在SYBASE里的事务处理中能不能包括建表、删表、修改表结构操作呀?

关键词

  • 代码
  • 数据库
  • 数据
  • ado
  • delphi
  • sql
  • detaildataset
  • masterdataset
  • arall
  • committrans

得分解答快速导航

  • 帖主:Risk_lee

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo