更新時提示row cannot be located for updating,some values may have been changed since it was last read.一般是什麽原因?

解决方案 »

  1.   

    这种情况一般是这样造成的假设:有一个数据表,有一条记录: (id,name) 1, 张三1.有一个访问这个数据表的软件,同时被两个人在两台机子上使用(或者一台机子运行两次)2.用户A使用软件,查询得到数据id=1,name=张三
    3.用户B使用软件,也查询得到数据id=1,name=张三4.用户A,修改记录,改为id=11,name=张三三5.用户B没有更新到数据库中的最新记录值(id=11,name=张三三),而是在数据
      id=1,name=张三 的基础上改为  id=14,name=张三四
      这个时候,用户B如果尝试向数据表Post数据,就会出现楼主的错误
      

  2.   

    这是多用户访问、更新数据库的软件中,容易出现的问题,当然也是有办法可以解决的。请LZ描述清楚你的情况,如果数据库连接方式,更新方式,使用了哪些数据集控件,大概说一下,大家会帮你的。或者LZ直接查一下历史贴,有很多的
      

  3.   

    謝謝你的熱心,do2008。
    我在自己在本地數據庫測試時也踫到這樣的錯誤,所以應該不是你說的那樣的原因。
    我用的數據集是adodataset,連接方式是緩存提交的方式也就是每次把所有的數據都讀過來然後一起更新
      

  4.   

    >>我在自己在本地數據庫測試時也踫到這樣的錯誤你的delphi是哪个版本呀,注意打一下补丁吧,到delphifans.com有下
      

  5.   

    与delphi版本没有关系的 这个是数据库访问出错
    如同 do2008(事情做了,才是事情) 所说,一般是这种情况但是呢,也有由于程序自身逻辑错误造成的。比如:
    你在获取数据后,更改了某个字段的值,但是没有提交(或者由于缓存而导致没有实际提交)到服务器,而你呢,根据你修改后的值作为条件来写update的sql语句就会产生这种错误。
    如果使用了缓存,建议强制刷新数据库在跟新。还有就是反过来的,你的数据已经提交到数据库,但是由于你先前查询的数据没有更新,所以你依据你先前查询的数据为条件的话,也会出错的。同样的建议,刷新你获取的数据也就是更新你的update的条件
      

  6.   

    謝謝兩位的熱心,現在問題解決了,不過是在數据集打開后給它的Update Criteria屬性付值為adCriteriaKey;這樣數據集查找紀錄時就只以關鍵字查找了。
    另外rcyboom(BOOM),我按你說的去做,我修改后如果馬上刷新數據庫那修改的就沒有了阿
    do2008(事情做了,才是事情)能加個qq29208357嗎,以後有問題可以向你請教。