起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 287|回复: 4

【搞定】问个关于事务的问题**

[复制链接]
发表于 2007-1-25 15:57:31 | 显示全部楼层 |阅读模式
一段代码里面的数据操作太多。。我想写个事务把它包起来,我应该怎么作,下面事代码:
      SBID:= DataSetBrokeryuan.DataSet.FieldByName('sbid').AsInteger;
      DataSetBrokertan.DataSet.Close;
      with TsqlDataSet(DataSetBrokertan.DataSet) do
        begin
          UserFilter := 'ACCENTANCE_NOTIFY_LIST.id = '+IntToStr(SBID);
        end;
        DataSetBrokertan.DataSet.Open;

      DataSetBrokertan.DataSet.Edit;
      i:=DataSetBrokeryuan.DataSet.FieldByName('cksl').AsInteger;
      h:=DataSetBrokertan.DataSet.FieldByName('sssl').AsInteger;
      j:=DataSetBrokertan.DataSet.FieldByName('kcsl').AsInteger;
      if i+j=h then
        begin
          DataSetBrokertan.DataSet.FieldByName('rkbz').AsInteger:=2;
        end;
      DataSetBrokertan.DataSet.FieldByName('kcsl').AsInteger:=i+j;
      DataSetBrokertan.DataSet.Post;
      DataSetBrokertan.DataSet.ApplyUpdates;
      DataSetBrokeryuan.DataSet.Delete;
      if DataSetBrokeryuan.DataSet.UpdatesPending = true then
        begin
          DataSetBrokerYuan.DataSet.First;
          while not DataSetBrokerYuan.DataSet.Eof do
            begin
              k:= DataSetBrokerYuan.DataSet.FieldByName('sbid').AsInteger;
              n:= DataSetBrokerYuan.DataSet.FieldByName('cksl').AsInteger;
              o:= DataSetBrokerYuan.DataSet.FieldByName('id').AsInteger;
              Query.Close;
              Query.Params.ParamByName('FAID').AsInteger:= o;
              Query.Open;
              m:= Query.FieldByName('cksl').AsInteger;
              with TsqlDataSet(DataSetBrokertan.DataSet) do
                begin
                  close;
                  UserFilter := 'ACCENTANCE_NOTIFY_LIST.id = '+IntToStr(k);
                  open;
                end;
              l:= DataSetBrokerTan.DataSet.FieldByName('kcsl').AsInteger;
              if n > m+l then
                begin
                  showmessage('出库数量多于库存数量');
                  DataSetBrokeryuan.DataSet.Edit;
                  DataSetBrokerYuan.DataSet.FieldByName('cksl').AsInteger:=m;
                  DataSetBrokeryuan.DataSet.Post;
                end
              else
                begin
                  DataSetBrokertan.DataSet.Edit;
                  DataSetBrokerTan.DataSet.FieldByName('kcsl').AsInteger:= l-(n-m);
                  DataSetBrokertan.DataSet.Post;
                  DataSetBrokertan.DataSet.ApplyUpdates;
                  DataSetBrokeryuan.DataSet.Edit;
                  DataSetBrokeryuan.DataSet.Post;
                end;
                DataSetBrokeryuan.DataSet.next;
            end;
            DataSetBrokertan.DataSet.ApplyUpdates;
        end;
回复

使用道具 举报

发表于 2007-1-25 15:59:55 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-25 16:00:22 | 显示全部楼层
我新手。应该怎么作呢。。大虾们帮一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-25 16:21:22 | 显示全部楼层
谢谢 aPanther
回复 支持 反对

使用道具 举报

发表于 2007-1-25 16:25:09 | 显示全部楼层
客气,结贴。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-24 01:29 , Processed in 0.037227 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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