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的过分依赖。