在query进行保存时,before post结束后,报错:
project  main.exe raised exception class EOLeException with message '多步操作产生错误。请检查每一步的状态值.' ,Process stopped. Use Step or Run to continue .
此时还没进入after post。
query是只对一个表进行操作。
什么原因,如何解决,请大侠们指教

解决方案 »

  1.   

    代码很长很长。
    其中部分:
    我在save时,执行:  if tblMaster.State in [dsInsert, dsEdit] then
        tblMaster.Post;
      try
        tblMaster.Connection.CommitTrans;
        tblMaster.Connection.BeginTrans;
        tblMaster.Refresh;
        ModifiedChanging(False);
        if SaveMessage <> '' then
          TCWGL120(OwnerForm).DispMsg(SaveMessage);
      except
        on E: EDataBaseError do
        begin
          tblMaster.Connection.RollbackTrans;
          tblMaster.Connection.BeginTrans;
          tblMaster.Refresh;
          ModifiedChanging(False);
          TCWGL120(OwnerForm).ShowError(E as EDBEngineError);
        end;
      end;procedure TdmCWGL120.DataSetBeforePost(DataSet: TDataSet);
    var
      i: Integer;
    begin
      inherited;
    {
         此处有很长一段执行程序,在调试时,已经屏蔽了
    }
    end;procedure TdmCWGL120.DataSetAfterPost(DataSet: TDataSet);
    begin
    // 此地的东西也被屏蔽了。发现还没到这里执行就已经报错了
    end;
      

  2.   

    没有用外键。执行中途,查过生成的主键ID,是唯一的。如果某些数据违反了数据库的约束条件,应该会报某个字段插入错误。不该报这个错误啊。怪。其他几个模块都没有这个问题。我开始怀疑是在插入时,query的状态是否有问题,是处于insert,edit等状态,但我去掉post那句话,进行:
    tblMaster.Connection.CommitTrans;
    tblMaster.Connection.BeginTrans;
    没有错。
    执行到:
    tblMaster.Refresh;  时报错,错误信息一样。
    此时所有状态应该复员了吧?
      

  3.   

    谢谢大家。确实是某个字段过小引起的。我调试,把每个字段值取出来,直接insert发现问题所在。
    问题已经解决。结帐!再次感谢