DATASNAP数据序列之FIREDAC的TFDJSONDataSets
DELPHI XE5开始增加了新的数据引擎——FIREDAC,它是跨平台的数据引擎,WINDOWS、LINUX、MAC、APP。。。。。。都可以使用。
随之DATASNAP也增加了新的远程方法返回数据类型——TFDJSONDataSets。
顾名思义TFDJSONDataSets是数据集列表,是多个数据集的集合,DATASNAP通过它一次可以返回多个查询结果数据集。
服务端代码:
function TServerMethods1.QuerySql2(const accountNo, sql: string): TFDJSONDataSets;
var
  d: TfrmDB;
begin
  Result := nil;
  if (accountNo = ‘‘) or (sql = ‘‘) then
    Exit;
  d := GetDBPool(accountNo).Lock;
  if not Assigned(d) then
    Exit;
  try
    try
      SetTraceOn(d);
      d.qryOpen.Close;
      d.qryOpen.sql.Clear;
      d.qryOpen.sql.Text := sql;
      d.qryOpen.Open;
      Result := TFDJSONDataSets.Create;
      TFDJSONDataSetsWriter.ListAdd(Result, ‘1‘, d.qryOpen);
    except
      on e: Exception do
      begin
        Result := nil;
        Log.WriteLog(‘TServerMethods1.QuerySql2 ‘ + e.Message);
      end;
    end;
  finally
    d.qryOpen.Close;
    GetDBPool(accountNo).Unlock(d);
    SetTraceOff(d);
  end;
end;
客户端代码:
首先引用 Data.FireDACJSONReflect
procedure TForm1.btnQuery2Click(Sender: TObject);
var
  LDataSets: TFDJSONDataSets;
  LDataSet: TFDDataSet;
begin
  DataSource1.DataSet := FDMemTable1;
  LDataSets := methods.QuerySql2(‘0‘, ‘select * from t1‘);
  LDataSet := TFDJSONDataSetsReader.GetListValueByName(LDataSets, ‘1‘);
  FDMemTable1.Close;
  FDMemTable1.Data := LDataSet;
end;
可以看到客户端是使用TFDMemTable内存表,而不是TCLIENTDATASET。
笔者已经多次提到过,FIREDAC引擎是使用TFDMemTable内存表来作为TCLIENTDATASET的替代。
TCLIENTDATASET的数据序列格式是OLEVARIANT,它是微软COM的数据格式。
现在DATASNAP正在去除对微软COM的过分依赖。
DATASNAP数据序列之FIREDAC的TFDJSONDataSets
原文:http://www.cnblogs.com/hnxxcxg/p/7468758.html