ClientDataSet探讨(4)--提交与恢复

KeyLife富翁笔记
作者: hongxing_dl
标题: ClientDataSet探讨(4)--提交与恢复
关键字: midas
分类: 开发经验
密级: 公开
(评分: , 回复: 0, 阅读: 111) »»

提交更新过程:
  首先,客户程序要调用ApplyUpdates函数向应用服务器提出申请,ApplyUpdates函数将通过IProvider接口把Delta(数据变动情况)属性传递给应用服务器。应用服务器收到客户程序的申请后,再向远程数据库服务器提出申请,并且把被远程数据库服务器认为出错的记录暂时缓存起来。应用服务器上的TDataSetProvider或TProvider构件把出错的记录返回给客户程序,其中包括错误信息和错误代码。客户程序收到这些出错的记录后,可以进行核对和修改,然后继续更新。注意:如果应用服务器端使用MTS类型的远程数据模块,就无法提供IProvider接口,这种情况下,必须通过远程数据模块的接口直接申请更新数据。
if ClientDataSet1.ChangeCount>0 then//有未决的修改
   ClientDataSet1.ApplyUpdates(MaxErrors);//将修改提交到服务器
参数MaxErrors用于指定一个最大错误数,如果出错的记录数超过了这个参数的值,此次更新就停止。如果MaxErrors参数设为0,只要应用服务器发现有一个错误的记录,更新操作就停止。如果MaxErrors参数设为-1,当应用服务器发现有错误的记录,就尝试更新下一个记录,等所有的记录都尝试过以后才返回。ApplyUpdates函数将返回实际遇到的错误数,同时,应用服务器将返回那些有错误的记录。
当应用服务器收到客户的提交请求后,触发OnUpdateData,这时就可以对客户提交的数据进行检查和编辑:

Procedure TDataModule1.Provider1UpdateData(Sender:TObject;DataSet: TClientDataSet);
Begin
  With DataSet Do
  Begin
    First;
    While not Eof Do
    Begin
      If UpdateStatus = usInserted then
      Begin
        Edit;
        FieldByName('DateCreated').AsDateTime := Date;
        Post;
      End;
      Next;
    End;
  End;
End;
然后将编辑后的数据提交到数据库服务器。
ClientDataSet1.CancelUpdates;//恢复所有修改过但未提交(包括提交未成功的)的记录
ClientDataSet1.UndoLastChange;//恢复前一次的修改,相当于Undo功能
注意使用这种提交方式(ApplyUpdates)在查询时尽可能避免使用数据处理(关联、分组、求和等等等),否则不能提交(除非自己写一些特殊处理程序)

posted @ 2004-08-06 09:26  D10.天地弦  阅读(1209)  评论(0编辑  收藏  举报