为什么我的程序总是出现'无法为更新行集定位一些值可能已在最后读取后改变'这样的提示!还有当我的表中有两条相同的记录时,当我删除其中的一条(在WWDBGRID中)就会出现:"键列信息不足或不正确更新影响到过多的行"这样的错误,然后会把相同的记录全部删除,这会不会与我所用的控件有关,我用的是IP3000的数据库控件!请各位大虾帮忙!急!

解决方案 »

  1.   

    我也遇到过这样的问题,是不是ADO版本的问题?
      

  2.   

    有可能是你增加了记录没有提交刷新,或如果是用的ADO,可能没打补丁,最好Borland发布的补丁都打好
      

  3.   

    出现这样的问题有几种情况:
    “键列信息不足或不正确更新影响到过多的行”:你的表没有建主键或者主索引,所以出现完全相同的几列数据导致删除时无法定位;'无法为更新行集定位一些值可能已在最后读取后改变':与上有关系,不过更大的可能是你使用的数据集控件,如table,它有一个updatemode属性,最好把它的值写成是updatewherekey;否则在updatewhereall模式下,对一些float字段的判断就会出现这样的错
      

  4.   

    谢谢以上几位,我的表是没有主键,我加上后"键列信息不足或不正确更新影响到过多的行"这个问题已经解决.
    但是还是会出现'无法为更新行集定位一些值可能已在最后读取后改变'这样的问题
    我用的是ADOQUERY控件,我的ADO和BORLAND的补丁都已经打了.
      

  5.   

    把Ado的CursorLoacation改成crUseServer即可解决“无法更新……最后读去改变”错误,可能原因是你的数据库有默认值,你插入新纪录的时候,会被默认值填充,而你的程序用的是crUseClient,因此没有更新过来。至于键列信息不足等,可能你解决上个问题之后,这个问题自然就解救了。
      

  6.   

    按照Kingron的指点,问题解决了,我想请问KINGRON,crUseClient和crUseServer有什么不同,对性能会有什么影响?请指教!thanks!
      

  7.   

    改为crUseServer?!这样的效率上是不是有影响(在一程度上)!而我发现,该错误仅在新增记录时会发生!
    而且,是在CancelBatch时,指针仍在“新记录”上时才会发生!
    我也是看过ADO2.6的Reference后才知道的!依照Reference的做法,只要把指错移开就是了...
    我曾试着修改ADO源程序,呵呵,因为技术水平与时间的因素,现在仍没有开工:-)
      

  8.   

    性能会有很大的影响!使用Server的性能要比Client低!如果需要大量的数据进行插入的话,特别明显。如果是浏览数据,考虑用Client,添加数据考虑用Server,若你在Insert纪录的时候,手工在客户端填充默认值,这样比较好,可以使用Client方式,而效率也能得到保证。
      

  9.   

    告诉你,你需要安装ADO的补丁。一个专门的补丁。
      

  10.   

    你的table控件要定位,不能随时换动,adoconnection最好只要一个。
      

  11.   

    我不可能要求用户的鼠标不乱动,我只用了一个adoconnection
      

  12.   

    '无法为更新行集定位一些值可能已在最后读取后改变' 的错误原因很简单:是由于设置了默认值造成的。解决方法:在使用之前调用refresh即可,或者把相关字段的AutoGenerateValue属性设成arDefault即可,最好不要把CursorLoacation改成crUseServer
      

  13.   

    在多用户环境下也会出现这种,就是两个人同时修改同一条数据时,
    可以用锁的方法解决,或者把cursorlaction 改为updatedatebatch就好
    一点