各位好!
    开发环境用的是SQL2000+D7
   数据库有一表使用字段ID作为主键。类型为自增长不可重复,标识为1其他字段都允许空;
   程序中连接方式为 TADOQUERY+ TDATASETPROVIDER +TCLIENTDATASET
   (其中adoquery,clientdataset都分别add all field且把id设置为
    pfinkey=true,pfinupdate = false,pfwhere = true,
   AutoGenerateValue = arAutoInc,readonly = true)。   在程序循环赋值
    clientdataset.append;
   clientdataset.fieldbyname('其他字段').asstring := 'xxx';
   clientdataset.post;
   第二次post出现 'key violation' 错误
   
   请问我是不是那里设置出错了?  

解决方案 »

  1.   

    数据库当中有限制数据不允许重复的规则(一般是unique索引,即平常所说的唯一键值索引).建议加强一下数据库基础知识.
      

  2.   

    字段ID已经设置为主键且自动增长了
    程序里赋值也没有对ID进行操作的
      

  3.   

    看看你的数据库是不是除主键(Master Key)以外的其它Unique Index
      

  4.   

    自增量字段你是不用作处理的,你在新增时不要显式的对该字段设值。
    如:select   add,bdd,cdd...   from   table   //不含自动增长型列
    所以不必对它操作,也不能对其操作。那是数据库的工作
      

  5.   

    kenshinggg:
       我没有对ID进行任何赋值动作的。都是由数据库对他自行管理的。帖子写的很清除了。谢谢你的回答
      

  6.   

    那就查看一下数据库相关表的identity_insert属性是否为True.
      

  7.   

    那你另外弄个测试环境测试一下.检查一下ConnectionString
      

  8.   

    仔细想了一下,有可能问题出在ClientDataSet的设置.试试把pfinkey=true改掉.
      

  9.   

    我也遇到这个问题了。我解决的办法是ADOQUERY.sql.text不用select * from 表,用select 字段1,字段2,... from 表,这里面不要加自增长字段,剩下的就是按你的做了。
      

  10.   

    我也遇到这个问题了。我解决的办法是ADOQUERY.sql.text不用select * from 表,用select 字段1,字段2,... from 表,这里面不要加自增长字段,剩下的就是按你的做了。