起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 360|回复: 11

【结贴】一样的代码,一个提示有错,一个运行正常

[复制链接]
发表于 2009-9-24 11:11:57 | 显示全部楼层 |阅读模式
类似的代码,一个有错误,一个没有,很晕

未命名.jpg

93.96 KB, 下载次数: 190

回复

使用道具 举报

 楼主| 发表于 2009-9-24 11:13:02 | 显示全部楼层

代码如下

var
  h:TTransactionHandle;
begin
   DataSetBroker1.DataSet.First;
   while not DataSetBroker1.DataSet.Eof do
   begin//111111111111111111
     if DataSetBroker1.DataSet.FieldByName('XD').AsInteger = 1 then
     begin
      h:=Transaction1.Start(true);
      try  //ÊÂÎñ¿ØÖÆ
         Query1.Close;
         Query1.CommandText := 'update WPRKZB  set TJBZ = 1 where BH =:a ';
         Query1.Params.ParamByName('a').AsString := DataSetBroker1.DataSet.FieldByName('BH').AsString;
         Query1.Execute;
         DataSetBroker1.DataSet.Next;
         Transaction1.Commit(h);   //ÊÂÎñ¿ØÖÆ
      except
        Transaction1.Rollback(h); //»Ø¹öÊÂÎñ£¬µ±Ö´ÐвÙ×÷ʧ°Ü»òÌá½»³ö´íºóÖ´ÐÐ
        Dialogs.ShowMessage('Êý¾Ý¸üÐÂʧ°Ü,ÇëÄúÖØÐÂÈë¿â!') ;
      end; //Èç¹ûûÓÐÈë¿â,¸üÐÂÈë¿âÊý¾Ý00000001
     end
     else
     begin
       DataSetBroker1.DataSet.Next;
     end;
   end; //1111111111111111
  DataSetBroker1.DataSet.Refresh;
  DataSetBroker2.DataSet.Refresh;
  Dialogs.ShowMessage('ÉóºË³É¹¦!')
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-24 11:14:31 | 显示全部楼层

另外一个代码

procedure TMainForm.Button5Click(Sender: TObject);
var
  h:TTransactionHandle;
begin
  DataSetBroker1.DataSet.First;
  while not DataSetBroker1.DataSet.Eof do
  begin//111111111111111111
    if DataSetBroker1.DataSet.FieldByName('XD').AsInteger = 1 then
    begin //2222222222222222
      h:=Transaction1.Start(true);
      try  //ÊÂÎñ¿ØÖÆ
        Query1.Close;
        Query1.CommandText := 'update WPRKZB  set SHBZ = 1 where BH =:a ';
        Query1.Params.ParamByName('a').AsString := DataSetBroker1.DataSet.FieldByName('BH').AsString;
        Query1.Execute;
        Query4.Close;
        Query4.CommandText := 'select * from WPRKMXB where BH =:a  ';
        Query4.Params.ParamByName('a').AsString := DataSetBroker1.DataSet.FieldByName('BH').AsString;
        Query4.Open;
        Query4.First;
        while not Query4.Eof do
        begin //333333333333333
          // ÐèÒªÐÞ¸Ä
          Query2.Close;
          Query2.CommandText := 'select WLDM from CKB where WLDM = :a';
          Query2.Params.ParamByName('a').AsString := Query4.FieldByName('WLDM').AsString;
          Query2.Open;
          if Query2.IsEmpty then
          begin
            Query3.Close;
            Query3.CommandText := 'insert into CKB (WLDM,SJKC,XNKC) values(:a,:b,:d)';
            Query3.Params.ParamByName('a').AsString := Query4.FieldByName('WLDM').AsString;
            Query3.Params.ParamByName('b').AsFloat :=  Query4.FieldByName('SL').AsFloat;
            Query3.Params.ParamByName('d').AsFloat := Query4.FieldByName('SL').AsFloat;
            Query3.Execute;
          end
          else
          begin
            Query3.Close;
            Query3.CommandText := 'update CKB set SJKC = SJKC + :b,XNKC= XNKC + :d where WLDM = :a  ';
            Query3.Params.ParamByName('a').AsString := Query4.FieldByName('WLDM').AsString;
            Query3.Params.ParamByName('b').AsFloat := Query4.FieldByName('SL').AsFloat;
            Query3.Params.ParamByName('d').AsFloat := Query4.FieldByName('SL').AsFloat;
            Query3.Execute;
          end;
          Query4.Next;
        end; //333333333333333333333

        Transaction1.Commit(h);   //ÊÂÎñ¿ØÖÆ
      except
        Transaction1.Rollback(h); //»Ø¹öÊÂÎñ£¬µ±Ö´ÐвÙ×÷ʧ°Ü»òÌá½»³ö´íºóÖ´ÐÐ
        Dialogs.ShowMessage('Êý¾Ý¸üÐÂʧ°Ü,ÇëÄúÖØÐÂÈë¿â!') ;
      end; //Èç¹ûûÓÐÈë¿â,¸üÐÂÈë¿âÊý¾Ý00000001
      DataSetBroker1.DataSet.Next;
    end //22222222222222
    else
    begin
      DataSetBroker1.DataSet.Next;
    end;
  end; //1111111111111111
  DataSetBroker1.DataSet.Refresh;
  DataSetBroker2.DataSet.Refresh;
  Dialogs.ShowMessage('ÉóºË³É¹¦!') ;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-24 11:15:44 | 显示全部楼层

非常奇怪

而且有时候,报这个错,有时候又正常,请求帮助
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-24 11:28:24 | 显示全部楼层
出错的时候,光标停留在DataSetBroker1.DataSet.Refresh; 上
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-24 11:29:31 | 显示全部楼层
Query1 更新的就是DataSetBroker1的数据
回复 支持 反对

使用道具 举报

发表于 2009-9-24 11:36:13 | 显示全部楼层
楼主,在同一个事务中,一个数据集只能执行一次applyupdates
如果执行超过两次,在第二次时就会报您楼上的错误。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-24 11:43:57 | 显示全部楼层
我该怎么改
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-24 11:59:57 | 显示全部楼层
代码很简单,但我不知道改怎么改,希望能帮着改改
回复 支持 反对

使用道具 举报

发表于 2009-9-24 13:44:27 | 显示全部楼层
如果确认没有对DataSetBroker1.DataSet做过数据修改,可以在
DataSetBroker1.DataSet.Refresh;之前
执行以下DataSetBroker1.DataSet.CancelUpdates
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-16 00:04 , Processed in 0.045284 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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