adocon.BeginTrans;
  try
    //更新读者表押金字段
    qryReaderInfoData.Close;
    qryReaderInfoData.SQL.Text := sSQL1;
    qryReaderInfoData.ExecSQL;
    //写manager.charge_log
    qryReaderInfoData.Close;
    storeprocChargeLog.Close;
    storeprocChargeLog.ExecProc;
    if storeprocChargeLog.Parameters.ParamByName('@li_retu').Value = 1 then  //执行不成功
    begin
      adocon.RollbackTrans;
      Result := -1;
      qryReaderInfoData.Close;
      qryReaderInfoData.Free;
      qryChargeLogData.Close;
      qryChargeLogData.Free;
      storeprocChargeLog.Close;
      storeprocChargeLog.Free;
      Exit;
    end;
    storeprocChargeLog.Close;
    qryChargeLogData.Close;
    qryChargeLogData.SQL.Text := sSQL;
    qryChargeLogData.ExecSQL;
    qryChargeLogData.Close;
    adocon.CommitTrans;
    Result := 100;
  except
    adocon.RollbackTrans;
    Result := -1;
  end;
我不知道我的代码哪错了,提示“在事务中,不能存在多个使用此游标类型的记录集”

解决方案 »

  1.   

    改为通过 adocon.Execute 直接提交SQL语句试一下
      

  2.   

    从楼主代码看,上面提示的游标方面的错误并不是实实在在的游标,而是由于楼主事务方面的错误而报出的错。
    建议楼主把事务方式改一下试试:
    adocon.BeginTrans;
    try
       ....
       adocon.CommitTrans;
       showmessage('保存成功');
    except
       adocon.RollbackTrans;
       showmessage('保存失败了,请检查');
    end;
      

  3.   

    我试了下,如果只有一个ExecSQL,是没问题的。再多一个ExecSQL,就提示“在事务中,不能存在多个使用此游标类型的记录集”,为啥啊,难道是某些属性没有设置?还是?
      

  4.   

    我发现了,如果在事务里写insert,update等语句,多个语句要用一个Query,写多少都行。但是如果其中加了个存储过程,或有多个Query就提示这个。