请问用database组件能实现回滚吗?发现执行一半停止后数据也没有回滚,改了一个表,另外一个没动。 paradox数据库的
         database1.Close;
         database1.Connected:=false;
         database1.DriverName:='STANDARD';
         database1.Params.Values['path']:='.';
         database1.Open;
         database1.Connected:=true;         query1.Close;
         query2.Close;
         query1.DatabaseName:='dbwork';
         query2.DatabaseName:='dbwork';         query2.SQL.Clear;         database1.StartTransaction;
   try
   query2.SQL.Add('update outbill set type=''9'',oprid=:oprid where outbhid=:outbhid ');
   query2.ParamByName('outbhid').AsString:=trim(edit1.Text);
   query2.ParamByName('oprid').AsString:=trim(gmusername); 
   query2.ExecSQL;   for i:=0 to R_length do
   begin
     clbhid:=RecordArray[i].name;
     tlsl:=RecordArray[i].value;      query1.SQL.Clear;
      query1.SQL.Add('update material set kcsl=kcsl+:tlsl  where clbhid=:clbhid ');
      query1.ParamByName('clbhid').AsString:=trim(clbhid);
      query1.ParamByName('tlsl').AsFloat:=abs(tlsl);
      query1.ExecSQL;              //执行到这里报错 record locked by another user 
   end;
      except
     database1.Rollback;
   end;
  end;另外,query在循环中报错 record locked by another user  

解决方案 »

  1.   

    ADOConnection1.BeginTrans;     //开始事务
    Try                            //异常保护
    ......
    ......
    ......
    ......
    ADOConnection1.CommitTrans;    //提交事务
    except                         //如有异常执行下一句
    ADOConnection1.RollbackTrans;  //回滚事务 
    end;你得先编译成Exe,然后执行Exe时报错的话才会进入异常处理回滚数据
    你在Delphi里面运行的话照样会报错的..
      

  2.   

    record locked by another user 
    资源冲突了
      

  3.   


    我的query的sql都clear了啊,难道要在循环里面加上query1.close?