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