var a,s:string;
begin   s:='update person set id='''+dbedit1.text+''',groupid='''+dbedit2.text+''',firstname='''+dbedit3.text+''',lastname='''+dbedit4.text+''',chinesename='''+dbedit5.text+''',sex='''+dbedit9.text+''',nationality='''+dbedit10.text+''',birth='''+dbedit11.text+''',passport_type='''+dbedit12.text+''',passport_num='''+dbedit13.text+''',place='''+dbedit16.text+''',mate_name='''+dbedit17.text+''',mate_nationality='''+dbedit18.text+''',over_date='''+dbedit9.text+''',duty='''+dbedit20.text+'''';
   adoquery1.Close;
   adoquery1.SQL.Clear;
   adoquery1.SQL.Add(s);
   adoquery1.ExecSQL;
   
   end;
其中PERSON表是本地access数据库的的表。。id为主键为,除了OVER_DATE为日期数据类型外。其他的都是字符类型。为什么我修改的时候会出现提示说我在试图在索引、主键创建重复的值。事实上并没有重复啊。请大家帮帮忙!!在线等待。谢谢

解决方案 »

  1.   

    看清楚你用的是update当你用这个的时候,数据库中已经存在了这样的一条记录,如果你用update的话,而且你没有带限定条件,那么数据表中所有的记录都会更改成相同的记录,那就当然会出现你说的那个提示了,
    解决方法:
    在后面加一个限定条件: where id=原来的ID
      

  2.   

    在最后加 'where id=???'限制一下吧
      

  3.   

    谢谢大家。。那么我该怎么加呢?'where id=???'
    我想修改当前指针所指的数据。。
      

  4.   

    adoquery1.edit;来实现修改当前的记录吧
      

  5.   

    where id =adoquery1.Fields[0].AsString
    这样可以吗?
      

  6.   

    var a,s:string;
    begin   s:='update person set id='''+dbedit1.text+''',groupid='''+dbedit2.text+''',firstname='''+dbedit3.text+''',lastname='''+dbedit4.text+''',chinesename='''+dbedit5.text+''',sex='''+dbedit9.text+''',nationality='''+dbedit10.text+''',birth='''+dbedit11.text+''',passport_type='''+dbedit12.text+''',passport_num='''+dbedit13.text+''',place='''+dbedit16.text+''',mate_name='''+dbedit17.text+''',mate_nationality='''+dbedit18.text+''',over_date='''+dbedit9.text+''',duty='''+dbedit20.text+''' where id='''+原来的ID+'''';{看这里前面一些,看那个where就是这样加的}
       adoquery1.Close;
       adoquery1.SQL.Clear;
       adoquery1.SQL.Add(s);
       adoquery1.ExecSQL;
       
       end;
      

  7.   

    不知道是不是sex='''+dbedit9.text+'''与over_date='''+dbedit9.text+'''重复使用了dbedit9.text主键?估计是over_date='''+dbedit19.text+'''的。
      

  8.   

    如果修改当前记录用EDIT更方便!
      

  9.   

    但是EDIT不能跟导憨条一起用啊。。