界面  clientdataset DataSetProvider ADOQuery 连接好后
当输入一个ID后,先判断ID是否存在,如果存在,取出来他的数据,放到界面。
然后添加。添加的方式是新建个Query先open然后循环clientdataset的数据包如果当前记录为dsinsert然后用post提交。
这样做没有任何问题。但是如果ID不存在,新建的记录后循环clientdataset的数据包如果当前记录为dsinsert然后用post提交。
那么当再次提交另一条记录的时候,循环clientdataset的数据包,第一条提交的数据状态还为dsinsert造成重复ID报错。
很奇怪的是如果我先输入一个存在的ID,以后所有的操作就都正常。真的很费解。
还有clientdataset的 updatestate的状态什么时候会转变,比如充dsinsert变为dsUnModify。
不知道我说没说清楚。请大家帮帮忙,这周末要搞定这个问题。代码很多不能贴出来。
希望高手指点

解决方案 »

  1.   

    UpdateStatus  不好意思写错了
      

  2.   

    也就是说新增的时候post后UpdateStatus状态没有改变导致下次增加的时候报错
      

  3.   

    设计思路有问题, 最好的解决方法就是写一个获取数据的中间层, 也就是把你现在获取数据代码独立出来重新写成一个类。简单就是 ClientDataSet1.Data := MyClass.Data;
      

  4.   

    应该用applyUpdata提交,这样数据才会提交到数据库。post只是提交到内存,并没有写入数据库。clientdataset有缓存功能,数据先保存在内存里,执行到applyUpdata时才会写入数据库