2011年10月1日星期六

datasnap的初步-返回数据集

现在的datasnap已经脱离了配布繁杂的COM,变成了基于json的datasnap了,那么以前的socksrv.exe不需要了,xe2的IDE里面的DataSnap Client下面的xxxConnection控件也不需要了,留着这些只是为了兼容以前的程序。

简单的写一个返回数据集的程序
一,服务端
TServerMethods1 = class(TDataModule)
    SQLConnection1: TSQLConnection;
    SQLDataSet1: TSQLDataSet;
  private
    { Private declarations }
  public
    { Public declarations }
    function EchoString(Value: string): string;
    function ReverseString(Value: string): string;
    function GetEmployees: TDataSet;
  end;

在xe2里服务端写代码,{$METHODINFO ON/OFF}的编译指令不需要了。
function TServerMethods1.GetEmployees: TDataSet;
begin
  with SQLDataSet1 do
  begin
    CommandText := 'SELECT * FROM Employees';
    Open;
  end;
  Result := SQLDataSet1;
end;
这样就返回了一个数据集,DataSnap会在内部进行marshall和unmarshall,让客户端得到这个DataSet。

二,客户端
客户端更简单
一般配置为TClientDataSet-->TDataSetProvider-->TSqlServerMethod-->TSQLConnection

就能显示出来服务器上返回的数据集了,但这样返回的数据集,是不能直接调用ClientDataSet.ApplyUpdates来更新的。

要让DataSnap能自动更新,只能让服务器端用TDataSetProvider来export的方法数据客户端用TClientDataSet-->TDSProviderConnection-->TSQLConnection才行,但一般实际应用中,服务器的逻辑比较多的不仅仅是增加删除记录这么简单,比较少用DataSnap的自动更新。





没有评论:

发表评论