当ADOquery1中的SQL语句为“select * from ABC”,在DBGRID中对此数据集任意修改不会出现问题,但当把SQL语句改为“select a,b,c from abc where a>10”时,再在DBGRID中进行修改操作,当修改到5行时,就会弹出一个出错信息:“键列信息不足或不正确,更新影响到多行”,然后就退出。
请问这个问题有没有好的办法解决?

解决方案 »

  1.   

    数据集的修改如果要影响到表中,我认为不要在sql中加条件,
    如果在dbGrid这样的显示控件中更新,感觉应该把表所有数据传进来,我是怀疑你修改后的记录,和表中已经有的记录有重叠的现象,不过你说的因为有查询条件导致数据集不能更新,我觉得是不会的,尽管我没测试过,
    还是检查自己的代码有没有问题
      

  2.   

    你把你的select a,b,c from abc where a>10改为select 健值,a,b,c from abc where a>10试试,估计是你这个sql里有重复行,所以ADO自动生成acton query时无法正确找到数据库里的行。
      

  3.   

    (1)如果不允许重复行,请确定没有重复的行.
    (2)如果允许重复行,请在表ABC中设置类似于ACCESS的自动编号的主键.
      

  4.   

    你的表还有主键啊?有主键的表不可能会出现这样的情况,除非表里有引用了触发器。表更新和你使不使用WHERE 没有关系