Midas是如何解析 ClientDataSet.Delta包? ( 积分: 100 )

  • 主题发起人 主题发起人 chenxp3000
  • 开始时间 开始时间
C

chenxp3000

Unregistered / Unconfirmed
GUEST, unregistred user!
各位同仁:
小弟有一问题想请大家帮忙讨论一下,我们都知道调用TDataSetProvider.ApplyUpdates(Delta,iErrorCount)就能更新数据包了,但是我想问一下TDataSetProvider.ApplyUpdates方法是如何解析Delta包的?怎样区分insert,delete,update并且分别构建SQL语句进行数据更新处理的呢?我看了一下源码?因水平太菜,看不懂,烦请各位帮忙,最好加以代码说明,谢谢!
 
各位同仁:
小弟有一问题想请大家帮忙讨论一下,我们都知道调用TDataSetProvider.ApplyUpdates(Delta,iErrorCount)就能更新数据包了,但是我想问一下TDataSetProvider.ApplyUpdates方法是如何解析Delta包的?怎样区分insert,delete,update并且分别构建SQL语句进行数据更新处理的呢?我看了一下源码?因水平太菜,看不懂,烦请各位帮忙,最好加以代码说明,谢谢!
 
我估计在源码里是看不到的。
其实只需要知道如何在TDataSetProvider的各种事件中控制客户端的更新就可以了,也就是如何在TDataSetProvider的各种事件中修改客户端提交的Delta,使数据满足规则。
如:客户端交的Delta中不包含“更改时间”,但在服务器端作更新时需要加上“更改时间”。本人也在为此问题郁闷,还望高人指教。
 
呵呵!欢迎大家继续发表意见
 
你把Delta取出来就知道Midas的工作机制了
标记为update的会有两条记录,原始和修改后的
自己做解析时要注意区分''和Null
[:D]
 
仔细研究了一下,发现可以使用TDataSetProvider的OnUpdateData事件来更改Delta,这样就可以控制客户端的更新内容了。
Procedure TDataModule1.Provider1UpdateData(Sender:TObject;[red]DataSet[/red]: TClientDataSet);
begin
  With [red]DataSet[/red]do
  begin
   First;
   While not Eofdo
    begin
    [red]If UpdateStatus = usInserted then
//判断记录的更新方式 [/red]
     begin
      Edit;
      FieldByName('DateCreated').AsDateTime := Date;
      Post;
     end;
    Next;
    end;
  end;
end;

应该可以解决问题了吧。
 
你把Delta取出来就知道Midas的工作机制了
标记为update的会有两条记录,原始和修改后的
自己做解析时要注意区分''和Null
[:D]
对。这个很重要。注意区分 '' 与 NULL
 
呵呵呵!感谢大家参与讨论。
 
其实我觉得Delta就是一个Mirror原理,
记住这个关键就OK了,
 
谢谢各位
 

Similar threads

回复
0
查看
1K
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
D
回复
0
查看
930
DelphiTeacher的专栏
D
后退
顶部