procedure TForm1.Button1Click(Sender: TObject);
var i:byte;
begin
  adoquery1.Close;
  adoquery1.SQL.Text:='select formno,funcno,name,menu_order from forminfo';
  adoquery1.Open;
  for i:=1 to 2 do
  begin
    adoquery1.Append;
    ADOQuery1.FieldByName('formno').AsString :='aa'+inttostr(i);
    ADOQuery1.FieldByName('name').AsString :='bb'+inttostr(i);
    ADOQuery1.FieldByName('funcno').AsString:='cc'+inttostr(i);
    ADOQuery1.FieldByName('menu_order').AsString:='dd'+inttostr(i);
  end;
  dbgrid1.Refresh;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
  adoquery1.CancelBatch(arAll);
end;
错误信息:Row handle refrred to a deleted row or a row ed for deletion.
哪位高手告诉我为什么?

解决方案 »

  1.   

    ADOQuery1.FieldByName('menu_order').AsString:='dd'+inttostr(i);
      ADOQuery1.Post;  //加这看看。
      end;
      

  2.   

    ADOQuery1.FieldByName('menu_order').AsString:='dd'+inttostr(i);
      ADOQuery1.Post;  //加这看看。
      end;
      

  3.   

    for i:=1 to 2 do

    确定表的1、2 条记录正常?
      

  4.   

    以上的方法都试了还是不行啊,为什么用BDE可以,ADO不行呢,我locktype设的为ltBatchOptimistic.
      

  5.   

    而且正常adoquery1.UpdateBatch都能正常存盘,adoquery1.CancelBatch就抛出错误,气死我了