DataSetProvider.dataset:= adoquery.
if clientDataset.changeCount > 0 then
begin
  clientDataset.post;
  DataSetProvider.ApplyUpdates(clientDataset.delta,0, outError);
end.请问大家有没有碰到数据有时保存不了的问题?如有,一般是如何解决的?
我有时会碰到这样的问题,不论你再怎么增加修改。
只有退出那界面再进去再增加修改才可以。
当然出现这种情况并不多。

解决方案 »

  1.   

    DataSetProvider.dataset:= adoquery. 
    if clientDataset.changeCount > 0 then 
    begin 
      try
        clientDataset.post; 
        DataSetProvider.ApplyUpdates(clientDataset.delta,0, outError); 
      except
        ;
      end;
    end. 
      

  2.   

    我的程序是这样的:
    if clientDataset.changecount>0 then
    clientDataset.post;
    try
      DataSetProvider.ApplyUpdates(clientDataset.delta,0, outError); 
      result:= true;
    except
      result:= False;
      raise;
    end;它也没有抱什么错,奇怪了。而且只是偶尔会出错,退出界面再进去重新输入就可以了。
    很奇怪。
      

  3.   

    这样:
    if clientDataset.changecount>0 then 
    clientDataset.post; 
    try 
      DataSetProvider.ApplyUpdates(clientDataset.delta,-1, outError); //第二个参数改为-1
      result:= outError=0; //只有outError为0才没有错误
    except 
      result:= False; 
      raise; 
    end; 
      

  4.   

    我的程序是这样的:
    if clientDataset.changecount>0 then
    clientDataset.post;
    try
      DataSetProvider.ApplyUpdates(clientDataset.delta,0, outError);
      result:= true;
    except
      result:= False;
      raise;
    end; //---------
    先POST , 再判断changecount>0 then applyupdates....
    你读DELTA的时候,如果为EMPTY会出个异常。不为空(如果数据集未保存,会自动POST一下的)
      

  5.   

    不好意思,我放上来的程序忘了加begin end了。
    应该是这样:
    if clientDataset.changecount>0 then
    begin
      clientDataset.post;
      try
        DataSetProvider.ApplyUpdates(clientDataset.delta,0, outError);
        result:= true;
      except
        result:= False;
        raise;
      end; 
    end;
      

  6.   

    使用midas技术的时候,注意ADODataset(TADOQuery继承自它)的resolvetodataset属性的设置。
    该属性决定更新语句的产生是有adoquery产生还是由TClientDatset产生。在applyupdates后,判断一下TClientDataset.changecount,
    然后再调用TClientDataset.MergeChangeLog;
      

  7.   

    DataSetProvider.dataset:= adoquery. 
    if clientDataset.changeCount > 0 then 
    begin 
      clientDataset.post; 
      DataSetProvider.ApplyUpdates(clientDataset.delta,0, outError); 
      clientDataset.MergeChangeLog;
    end. 
      

  8.   

    说实话,俺还是觉得DataSetProvider.ApplyUpdates一直不太稳定,要不就是俺什么地方设置错了,强烈建议用sql语句来更新,可观可测~抓的着看得见~~~
      

  9.   

    我现在的做法不是单条记录更新的,而是多条更新,比如打开了20条记录,用户就在那20记录中修改了其中的两条,
    如用SQL更新,很麻烦吧.