源程序如下:
    Progressbar1.Max := ADOTable1.RecordCount;
    ADOTable1.First;
    While not ADOTable1.Eof do begin
      if ClientDataSet1.FindKey([ADOTable1['MNo']]) then  begin
        ShowMessage('材料代码有重复!');
        Break;
      end;
      ClientDataSet1.Append;
      ClientDataSet1.FieldByName('Cldm').AsString := ADOTable1['MNo'];
      ClientDataSet1.FieldByName('Tcj').Value := ADOTable1['Price'];
      ClientDataSet1.FieldByName('JCGS').Value := StrToFloat(ADOTable1['Price']);
      ClientDataSet1.Post;
      Progressbar1.Position := ADOTable1.RecNo;
      ADOTable1.Next;
      Application.ProcessMessages;
    end;
    ADOTable1.Close;老是要出错,提示为:
“Bof 或Eof中有一个是‘真’,或当前记录以被删除,所需要的操作要求一个当前的记录。”请问这是什么原因造成的?谢谢!up有分拿。

解决方案 »

  1.   

    哪句报错?是ClientDataSet1.Post; 吗?
      

  2.   

    循环执行完后,在执行ADOTable1.Close;时报的错误。
      

  3.   

    是的,是 ADO 的 BUG!
      

  4.   

    BORLAND 有专门的升级包,
    在 DELPHI 6 \DELPHI 7 中没有此问题。
      

  5.   

    是的,这是ADO的BUG .你用的是delphi5吧,
      

  6.   

    你的ADOTABLE查询出来的是空的情况下有可能会出现上面的问题哦
      

  7.   

    循环都是执行完了的啊,我在ADOTable1.Close;前面设置断点都是ok了的。
    难道真是bug?换个思路,用ADOTable1.RecNo :=ADOTable1.RecNo+1;来实现,
    要多执行一遍,由于我的‘MNo’是唯一的,如果有重复的就Break出来,这样行吗?
    如果有bug的话,在什么地方下载升级程序?谢谢!!!
      

  8.   

    ado的bug,升级一下就可以了,去google搜索一下mdac
      

  9.   

    http://mis.cashq.ac.cn/download/Soft_Details.asp?SoftNo=77
      

  10.   

    谢谢各位,的确是Delphi5的ADO有Bug。
    现在我换Delphi6重新作了一遍,就pass了。
    再次感谢各位的帮助!