起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 101|回复: 6

【结帖】请教**

[复制链接]
发表于 2008-5-29 18:12:13 | 显示全部楼层 |阅读模式
文档里也说  wiki里也说  
在一个InfoBroker里的数据集是在一个事务中
为什么现在我在对一个数据集进行操作的时候在从表的前两条记录保存好后  在录入第三条物资的时候在程序里raise Exception
不是说的有事务了  数据都要rollback的么
为什么前几条记录全部保存到数据库了??
回复

使用道具 举报

发表于 2008-5-30 08:49:18 | 显示全部楼层
对,同一个业务信息下的 数据集提交是放在同一个事务里的。
具体描述下你是怎么做的以及具体情况。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-30 08:57:25 | 显示全部楼层
datasetxb.First;
  while not(datasetxb.Eof) do
  begin
    wzbm:= datasetxb.FieldByName('wzbm').AsString;

    datasettz.Append;
    datasettz.FieldByName('pzbm').AsString:= datasetjb.FieldByName('rkdbm').AsString;
    datasettz.FieldByName('wzbm').AsString:= datasetxb.FieldByName('wzbm').AsString;
    datasettz.FieldByName('sfbz').AsString:= '0';
    datasettz.Post;

    IfLocalValue(wzbm,gsbm);
    if flag <> 1 then
      IfSeverValue(wzbm,gsbm);

    datasetxb.Next;

    else if FQry.RecordCount>1 then
    begin
      try
        raise Exception.Create;
      finally
        DataSetWzkc.Close;
        DataSetWzkc.Free;
        DataSetXb.Close;
        DataSetXb.Free;
        DataSetTz.Close;
        DataSetTz.Free;
        DataSetJb.Close;
        DataSetJb.Free;
      end;
    end;
  finally
    FQry.Free;
  end;
end;
这是具体代码
大于1的情况是条件不满足的情况  为了能报错使这次回滚
所以我就raise了一个异常   但是在之前的数据全写进数据库了  并没有发生回滚
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-30 08:58:32 | 显示全部楼层
datasetxb.First;
  while not(datasetxb.Eof) do
  begin
    wzbm:= datasetxb.FieldByName('wzbm').AsString;

    datasettz.Append;
    datasettz.FieldByName('pzbm').AsString:= datasetjb.FieldByName('rkdbm').AsString;
    datasettz.FieldByName('wzbm').AsString:= datasetxb.FieldByName('wzbm').AsString;
    datasettz.FieldByName('sfbz').AsString:= '0';
    datasettz.Post;

    IfLocalValue(wzbm,gsbm);
    if flag <> 1 then
      IfSeverValue(wzbm,gsbm);

    datasetxb.Next;

   


引发异常的代码
报错的代码
    else if FQry.RecordCount>1 then
    begin
      try
        raise Exception.Create;
      finally
        DataSetWzkc.Close;
        DataSetWzkc.Free;
        DataSetXb.Close;
        DataSetXb.Free;
        DataSetTz.Close;
        DataSetTz.Free;
        DataSetJb.Close;
        DataSetJb.Free;
      end;
    end;
  finally
    FQry.Free;
  end;
end;
回复 支持 反对

使用道具 举报

发表于 2008-5-30 10:00:21 | 显示全部楼层
raise只是抛出一个异常,又不是说你提交失败了。
你要做测试的话, 比较简单的方式就是数据提交的时候某个关键字段为空或者数据类型不匹配的方式,然后你提交数据看看。
回复 支持 反对

使用道具 举报

发表于 2008-6-2 09:29:52 | 显示全部楼层
??
回复 支持 反对

使用道具 举报

发表于 2008-6-30 13:24:23 | 显示全部楼层
由于楼主长期未反馈,先结帖!
有问题请重新开帖!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-18 12:16 , Processed in 0.041392 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表