三层结构,客户端有一clientdataset控件。以前程序还好好的,今天运行,在增加数据提交applyupdates(0)的时候出错,显示"key violation"。请问该如何解决。

解决方案 »

  1.   

    你的库append时和原记录有重复(或者在不重复关键字段上有重复)。
      

  2.   

    有啊,有一个ID(主键)关联着另一个表ID(从表).
    该如何解决? 急!
      

  3.   

    我的表除了ID不允许空之外,其他都可以为空,我试过在程序里面只是
    if ClientDataSet1.CanModify then
    begin
    ClientDataSet1.Append;
    ClientDataSet1.FieldByName('name').Value:=name.Text;
    ClientDataSet1.applyupdates(0);
    end;这样也出错。
      

  4.   

    该如何解决呢?我更新的表是主表,外接着一个从表的。
    clientdataset1 --->  master表
    clientdataset2 --->  detail表
      

  5.   

    估计,你的clientdataset1关系混乱了.
    你重新建一个clientdataset的联接,如果不行,再检查数据库也不迟.
      

  6.   

    你的主健没有赋值,if ClientDataSet1.CanModify then
    begin
    ClientDataSet1.Append;
    ClientDataSet1.FieldByName('ID').Value := xxxx; //加上这一句,且不能与原主健值重复
    ClientDataSet1.FieldByName('name').Value:=name.Text;
    ClientDataSet1.applyupdates(0);
    end;
      

  7.   

    像这clientdataset不能添加数据,这种问题我也遇到过.最终也是搞不清哪里出错,数据库一般是没有问题的.所以你新建一个clientdataset试试了.我现在在客户端一般都不用clientdataset,直接把添加的记录以字符串的形式传回到后台.
      

  8.   

    maozefa(之源),我的主键'ID'是自动累加值,所以不能指定的。
      

  9.   

    那证明你的自动累加出毛病,因为错误"key violation"确实是关键字违规。
      

  10.   

    之间我没有做master/detail 前是正常的。
    我甚至在sql server里面直接用sql 语句insert 也行,但在程序里面即使我用clientdataset.commandtext=.... 也提示这样
      

  11.   

    既然如此,建议你在主表Append前,解除Master/Detail关系,更新后再挂上来。
      

  12.   

    Master/Detail关系在中间层啊!!!如果解除了,那detail资料也无法显示了
      

  13.   

    windows问题吧,建意到别的系统上使用一下试试…
    我的程序在98下一会好,一会不好,到2000下就没问题
      

  14.   

    已经设置中间层的Master/Detail关系,客户端就不能再设置Master/Detail关系。你的问题可能就在这里。