我一直象你这样使用,而且是用access,只有在多用户时遇到过。试用rs.open "select * from "....,后再set grid.source=rs肯定是没有问题的。你不防把表的结构列出,关键的程序帖出来看看,肯定是程序的问题。

解决方案 »

  1.   

    我以前也遇到无法更新定位的问题,因为一些关键字段被修改了无法定位。于是我就又加了一个ID字段,作为定位标示。只要知道被修改的记录时那个ID就可以定位了!不过此法稍是麻烦一些,但很实用很稳定
      

  2.   

    在多用户方式下是没办法避免冲突的,只能是在更新前检查一下数据源,如查数据发生了变化(现有数据称为脏数据),则现有数据可能要废弃,如果有主关键字,数据可能还是有用。如果没有主关键字,可能会使SQL数据库中产生两条完全相同的记录,这时麻烦就大了。
      

  3.   

    你可以看看你的数据库里是否都有主键,ADO更新时需要收集主键信息,如果没有则经常会出错
      

  4.   

    说得很好 回复人: Yang_(扬帆破浪) (  ) 信誉:220  2002-6-18 11:16:45  得分:0  
     
     
      这个问题以前好象也遇到过,好象改了几次就解决了,估计是改了用法。我想提醒的是:
      1、在网格直接修改不是一个好方法,至少操作员不方便。
      2、尿是死的,人是活的,活人不能被尿憋死;控件是死的,程序是活的,程序同样不应该被控件憋死。
      3、也许只是修改一下游标的属性就可以解决,何必浪费时间呢,别人没有你的环境,猜不出你的原因而已。注:本人一向不喜欢用“好象”、“估计”、“也许”来回答,这次算破例了,目的只在于“走路遇到石头,可以爬过去,也可以绕过去”,你的认真也许是你以后成功的因素,祝福你!
       
      

  5.   

    无法为更新定位行,一些值可能已在最后一次读取后已更改
    Ado在update时发生的错误,也就是程序在保存数据时发生的
    这种错误一般是程序员在用datagrid等网格控件时发生的,以下几种情况会产生此类错误:
       1.表里有两条一样的记录,即重复记录,只要程序控制好,就会避免(大部分情况属于这一种),主要通过程序控制,即不让产生重复记录
       2.两个以上的网格同时读一条记录,导致程序混乱,一个网格要修改字段的值,另一个网格可能将同一字段修改成另一个值,这种问题发生的情况较少,一般是设计时的问题,应避免这种情况。只好几个ado的update,updatebatch顺序写好了,程序应该没问题
      

  6.   

    多谢各位。事实上我只用了一个grid(TruDBGrid7Pro),rs中有一个唯一索引的自动编号字段,另外还有个索引字段,这样应该不会有重复的记录的,在单用户下,也不会有冲突。而且该错误也不一定发生在addnew时,在edit时也会发生
      

  7.   

    此种问题就是典型的时间差问题,
    也就是当你正在修改数据时,在你提交以前,别人已经修改了数据或者删除,然后你提交,必然出错。
    AddNew时,如果出错,那是因为你的主键冲突。
    解决的办法是,用事务处理(Transaction)。
    详细参考MSDN.
      

  8.   

    To abcmouse(鹤飞) 是单用户呀
      

  9.   

    一定是你把记录绑定到了一些控件。又在此过程中增加或删除过一些记录,但没有刷新记录。见意:
    一、少用绑定控件的方法。特别是对有增删改的记集
    二、不得已,可选用不同的记录集游标打开试试。
    三、在对记录增删改前,先刷新记录集。
    四、建表一定要加一个noID(自增)