DModule.TabHouseData.refresh时和调用以下过程时
RefreshAfterBook(DModule.TabHouseData);
过程语句:
procedure TLBuildDataFrm.RefreshAfterBook(DataSet:TDataSet);
var
  Book:TBook;
begin
  Book:=DataSet.GetBook;
  DataSet.Refresh;
  DataSet.GotoBook(Book);
  DataSet.FreeBook(Book);
end;
均出现以下错误信息:
  key value for this row was changed or deleted at the data store.
the local row  is now deleted

解决方案 »

  1.   

    procedure TLBuildDataFrm.RefreshAfterBook(DataSet:TDataSet);
    begin
      try
        DataSet.Refresh;
      except  //在Delphi IDE中运行程序时可能有异常出现,不要管它,在外部运行就没有问题了
      end;
    end;—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  2.   

    TDataSet.Refresh是一个不安全的方法,不支持它的所有派生类,ado组件中的数据集组件最好不用它,改用close再open的办法来刷新数据集。就是BDE中的TQuery好像也不行,也要改用close+open
      

  3.   

    客户端结果集的primary key与数据库对应关系好像出现了错误,这个时直接导致错误的原因,至于为什么会出现这个错误你还是自己分析你的数据吧。
      

  4.   

    我刚才试了试,只要给数据集设一个单键索引,用Refresh就不会出问题
      

  5.   

    呵呵,ado组件当然是支持Refresh的,BDE中的TQuery倒的确是不支持。—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  6.   

    但是用Close+Open后,好像书签不起作用啊.
      

  7.   

    Close+Open后,书签就必然失效。书签只在数据集没有关闭过的过程中才有效。—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  8.   

    但refresh又要以close+open,怎么办.有谁有好的方法啊
      

  9.   

    要close再OPEN定位到原来的记录,那只能在CLOSE之前记下该条记录的关键字,OPEN后再locate了