procedure TForm1.Button1Click(Sender: TObject);
begin
  Inc(S);
  adotable1.Append;
  adotable1['ID'] := S;
  adotable1.Post;  adotable1.Edit;
  adotable1['NAME'] := 'abc';
  Adotable1['IDNUMBER'] := 'adklsfj';
  Adotable1['STOCK'] := 5000;
  adotable1.Post;
end;该表的字段等都是没问题的,但执行时却出现错误:
"无法为更新定位行,一些值可能已在最后一次读取后已更改"
当我把Adotable1表的cursortype设为clUserServer,则没问题,这是什么原因.
如果我在Post后使用Refresh也没问题,但我试过在数据量较大,如800条记录时,则速度慢得不得了,
请各高手,应该如何解决问题?

解决方案 »

  1.   

    因为保存前,数据库中的数据发生了改变。
    在保存时就会提示上述错误
    1.数据库中定义个主键
    2.有些字段不能设置为可以自动获得默认值,Delphi默认不添加空的重复记录
      

  2.   

    贴个help里面给出的例子:
    ///////////////////////////////////////////////////////////////
    procedure TForm1.Button1Click(Sender: TObject);begin
      SampleTable.Append;
      SampleTable.FieldValues['ALPHANUMERIC'] := Edit1.text;
      SampleTable.FieldValues['INTEGER'] := StrToInt(Edit2.text);
      SampleTable.Post;
    end;
    ////////////////////////////////////////////////////////////////
    不需要edit
      

  3.   

    先close在open定位到你要更新的记录
      

  4.   

    同意ptpa
    我也遇到过这种问题
    你post后如果不关闭数据库,你下次使用数据库的时候,它使用的仍然是以前读入内存的表
      

  5.   

    naner_china(naner)兄说对了,非常感谢!
    主要是因为ACCESS数据库中,好像如果是数值型它自动会设置为默认值为0,所以才会出现这种错误,谢谢各位!结贴!
      

  6.   

    ptpa所说情况我没遇过,如果你是用ADOTable去添加的话,那应该不会出现这样子的