呵呵,检查一下你的表中有没有主关键字?ADO都是依靠主键来寻找的,这是ADO内部的工作原理问题。

解决方案 »

  1.   

    1.“检查一下你的表中有没有主关键字?”    已经设置自动id为主键
    2.“由于更新的记录存在有两条完全相同的记录。 ”  不可能,.addnew以后进行修改就经常出问题。
      

  2.   

    是不是使用了DataGrid控件,该控件经常有此错误提示。
      

  3.   

    我也试过:
      .open
      .addnew
      新加入数据
      .update
      .close
      .open.....
      修改数据
      .update
    也是有可能出现“无法为更新行集定位:一些值可能已在最后读取后改变”各种游标和locktype我都试过。都不稳定。我希望各位高手能帮我想个稳定的办法。
      

  4.   

    如果不帮定到datagrid控件也会出同样的问题。
      

  5.   

    我也问过这个问题,这有可能是ado的bug,后来我不得不多次requery,期望有更好的答案!!
      

  6.   

    我认为这是因为表中设置有默认值,当ADDNEW后UPDATE,没有输入的字段会自动取默认值填充,实际数据就与RECORDSET中的数据不一样了,因此再修改就有这样的提示。
    我的方法,在ADDNEW的UPDATE后加一句:Recordset.Resync adAffectCurrent
    使数据同步。
      

  7.   

    “因为表中设置有默认值,当ADDNEW后UPDATE,没有输入的字段会自动取默认值填充”
    不可能,我在.addnew的时候已经把所有的值都先写进去了,用户没有输的都填0,或者空字符串。
    数据库中没有设置默认值。
      

  8.   

    检查一下你数据库各字段的验证条件,如是否允许为NULL、为空等。
      

  9.   

    自动编号字段addnew后无法自动取得自动生成的值,sqlserver可以通过把查询放在存储过程解决,Access不知有什么好办法,
    recordset的CursorType属性设为adOpenDynamic(动态游标)试试看
      

  10.   

    我以前碰到同样地错误提示,采取的办法是加一刷新的方法(.refresh),将ADO内部数据缓冲区内容提交到数据库,并清空数据缓冲区,便于添加新的记录。
      

  11.   

    有没有自动编号的字段都会出现同样的状况。
    数据库本身没有设置任何的验证条件。
    加了 .refresh 也存在同样的问题。
    使用动态游标也不行。有没有其他能使操作稳定的办法?
      

  12.   

    我也提一个问题:rs.open
    rs.addnew
    rs.update时
    出现错误错误提示:
    实时错误'-2147217864(80040e38)'
    无法为更新行集定位:一些值已在读取后改变。
    为什么?!
      

  13.   

    讨论过多次了
    http://www.csdn.net/expert/topic/461/461157.shtm
      

  14.   

    Requery最然很有效,但的确是很笨的办法,速度让人受不了
      

  15.   

    注意要使用客户端游标。如果你是自己生成的RecordSet对象然后绑定到控件一定要使用
    客户端有标,否则不行。
    建议你操作时采用SQL,不要采用RecordSet.AddNew等方法,容易出问题,采用SQL自己写
    麻烦较大,不过稳定。