Dbgrid1连接数据库,库中有3个字段:单价,数量及金额.我在Dbgrid1中输入单价及数量后,金额自动计算.我在Dbgrid1的oncolexit事件中判断当前列是不是数量,如果是则计算金额,第一次计算正常,但是当第二次鼠标从数量所在列退出时系统提示:
"无法为更新定位行,一些值可能已在最后一次读取后已更改."
请问是什么原因呢?

解决方案 »

  1.   

    把代码贴上了
    这种错误是因为你用SQL
    更新的后台数据
    而前台的表没有及时更新数据
      

  2.   

    procedure Tkcform.DBGrid1ColExit(Sender: TObject);
    begin
      if dbgrid1.SelectedField.FieldName='kcsl' then
      {如果单价及数量都不为空,则计算金额}
      if (adoquery1.FieldByName('price').AsString<>'') and
         (adoquery1.FieldByName('kcsl').asstring<>'') then
      begin
        adoquery1.Edit;
        adoquery1.FieldByName('kcje').AsFloat:=adoquery1.fieldbyname('price').Asfloat
        *adoquery1.fieldbyname('kcsl').AsFloat;
        adoquery1.Post;
      end
      else
      begin
        application.MessageBox('单价及数量必须输入!',
          '系统提示',mb_ok+mb_iconinformation);
        dbgrid1.SelectedIndex:=7;  {单价单元格获得焦点}
      end;
    end;
      

  3.   

    为了能够恢复所做的修改,我设计了两个完全相同的表,Dbgrid中连的表是复制的表,会不会和这个有关?
      

  4.   

    这两个表是完全相同的,我在sql server中操作原表时添加,修改,删除都可以,但是对于另一个表可添加,只能修改以前的记录,对于刚添加的记录无法修改.不知什么原因.