SQL2000有个表 TTE(A,B,C)主键Adelphi中用DBGrid显示数据,当选中DBGrid某条记录,其值显示在相应Edit框中,然后通过Edit进行编辑,保存用ADOQuery1.Edit 修改数据,代码如下
...
Try
  adoquery1.Edit;
  adoquery1.fieldbyname('A').asstring:=Trim(edit1.text);
  adoquery1.fieldbyname('B').asstring:=Trim(edit2.text);
  adoquery1.fieldbyname('C').asstring:=Trim(edit3.text);
  adoquery1.Post;
except
  Showmessage('数据修改异常!');
end;
...错误提示:不能插入重复键

解决方案 »

  1.   

    很明显,不是edit无法编辑数据,而是数据库引擎告诉你,插入的数据存在主键约束重复
    是不是忘了设定主键值了
      

  2.   

    主键是A字段,是不能添加和修改的。当你修改时,你写了这一句adoquery1.fieldbyname('A').asstring:=Trim(edit1.text);主键都已经有了,你还要再写一次,当然会提示“无法插入重复键”你把这一句删了试试
      

  3.   

    关键是我想做可以修改任何字段的功能啊,按道理,每个字段都可以修改的啊,修改当前的记录,改了主键可以变成了另一条记录,只要不跟表里其它主键值重复就可以,问题是我改了后,表里好象插入了一条跟当前修改的记录键值一样,只是修改的那个字段不一样的记录,所以提示“无法插入重复键”
    删除了这句adoquery1.fieldbyname('A').asstring:=Trim(edit1.text); 照样插入了一条记录,而且代替了第一条记录,不知道为什么为这样???
      

  4.   


    如果是这样,那么新增记录的A字段里面是什么值:空值?主键为空值能保存吗?所以估计你的代码里面还有别的地方在根据这几个Edit的内容向数据库里面增加记录。把所有涉及ADOQuery1的代码上设置断点,跟一下程序执行逻辑试试。