OLEVARIANT的替代——FIREDAC的TFDJSONDataSets和TFDJSONDeltas
2014-10-06 22:27
232 查看
OLEVARIANT——这个COM的序列格式,也是DATASNAP已使用了20年的序列格式, 在20年以后的今天,终于有了它的替代者:FIREDAC的TFDJSONDataSets和TFDJSONDeltas,XE5UPDATE2以上版本的DATASNAP的远程方法定义里面已经增加了这2种类型的支持。 FIREDAC的TFDCONNECTION尚没有“GENERATEDATASNAPCLIENTCLASSES”的项,感觉不方便,笔者测试的时候使用TSQLCONNECTION生成的客户端代理类, 易博龙稍后是否会提供?不得而知。
TFDJSONDataSets:数据集对象列表,可包含N个数据集对象,不论是单表查询或多表查询(主从表)的数据都用这种类型返回给客户端。
TFDJSONDeltas:客户端数据集的DELTA列表,可包含N个DELTA,不论是单表提交或多表提交(主从表)的数据都用这种类型提交给服务端。
为什么要有替代品? DATASNAP为了完全去除对COM的依存,为了能跨平台。 替代者的性能是否强于OLEVARIANT?
笔者未作测试对比,不敢断言。 下面分别给出服务端和客户端的演示代码。 一)服务器端代码演示 1)常量定义: const sDepartment='Department'; sEmployees='Employees';
2)查询数据:
functionTServerMethods1.GetDepartmentEmployees(constAID:string):TFDJSONDataSets; begin //Clearactivesothatquerywillreexecute. FDQueryDepartmentEmployees.Active:=False; FDQueryDepartment.Active:=False; FDQueryDepartment.Params[0].Value:=AID; FDQueryDepartmentEmployees.Params[0].Value:=AID; //Createdatasetlist Result:=TFDJSONDataSets.Create; //Adddepartmentsdataset TFDJSONDataSetsWriter.ListAdd(Result,sDepartment,FDQueryDepartment); //Addemployeesdataset TFDJSONDataSetsWriter.ListAdd(Result,sEmployees,FDQueryDepartmentEmployees); end;
TFDJSONDataSets,FIREDAC的数据集列表对象,可返回多个数据集。 3)提交数据:
procedureTServerMethods1.ApplyChangesDepartmentEmployees( constADeltaList:TFDJSONDeltas); var LApply:IFDJSONDeltasApplyUpdates; begin //Createtheapplyobject LApply:=TFDJSONDeltasApplyUpdates.Create(ADeltaList); //Applythedepartmentdelta LApply.ApplyUpdates(sDepartment,FDQueryDepartment.Command); ifLApply.Errors.Count=0then //Ifnoerrors,applytheemployeedelta LApply.ApplyUpdates(sEmployees,FDQueryDepartmentEmployees.Command); ifLApply.Errors.Count>0then //Raiseanexceptionifanyerrors. raiseException.Create(LApply.Errors.Strings.Text); end; 二)客户端演示代码 1)查询数据:
procedureTForm2.GetDepartmentEmployees(constADEPTNO:string); var LDataSetList:TFDJSONDataSets; LDataSet:TFDDataSet; begin LDataSetList:=ClientModule1.ServerMethods1Client.GetDepartmentEmployees(ADEPTNO); //Getdepartmentdataset LDataSet:=TFDJSONDataSetsReader.GetListValueByName(LDataSetList,sDepartment); //UpdateUI FDMemTableDepartment.Active:=False; FDMemTableDepartment.AppendData(LDataSet); //Getemployeesdataset LDataSet:=TFDJSONDataSetsReader.GetListValueByName(LDataSetList,sEmployees); //UpdateUI FDMemTableEmployee.Active:=False; FDMemTableEmployee.AppendData(LDataSet); end; 2)提交数据:
functionTForm2.GetDeltas:TFDJSONDeltas; begin //Postifediting ifFDMemTableDepartment.StateindsEditModesthen begin FDMemTableDepartment.Post; end; ifFDMemTableEmployee.StateindsEditModesthen begin FDMemTableEmployee.Post; end; //Createadeltalist Result:=TFDJSONDeltas.Create; //Adddeltas TFDJSONDeltasWriter.ListAdd(Result,sEmployees,FDMemTableEmployee); TFDJSONDeltasWriter.ListAdd(Result,sDepartment,FDMemTableDepartment); end;
procedureTForm2.ApplyUpdates; var LDeltaList:TFDJSONDeltas; begin LDeltaList:=GetDeltas; //Callservermethod.Passthedeltalist. ClientModule1.ServerMethods1Client.ApplyChangesDepartmentEmployees(LDeltaList); end; 注意: 服务端和客户端都要放置2个控件:TFDStanStorageJSONLink TFDStanStorageBinLink
相关文章推荐
- OLEVARIANT的替代——FIREDAC的TFDJSONDataSets和TFDJSONDeltas
- FIREDAC的TFDJSONDataSets和TFDJSONDeltas查询和提交数据
- DATASNAP数据序列之FIREDAC的TFDJSONDataSets
- DATASNAP数据提交之FIREDAC的TFDJSONDeltas
- DATASNAP为支持FIREDAC而增加的远程方法的数据类型TFDJSONDataSets
- 分布式计算中WebService的替代方案: RPC (XML-RPC | JSON-RPC)
- Spring MVC4设置使用fastjson作为json解析器,替代jackson
- 解决在OFFICE平台传输数据慢的问题,使用GZIP+JSON替代WEBSERVICE提供数据
- 解决PHP中json_encode()不支持中文的替代函数
- 使用 FireDAC的 TFDConnection, TFDQuery 最初只能显示50条记录,TDateSet.RecordCount总是获得50的解决方法。
- 使用JSON替代XML
- C# .net core 使用JsonConvert替代JavaScriptSerializer
- 为什么Android开发者应该使用FlatBuffers替代JSON?
- 为何 Android 开发者在逐渐用 FlatBuffers 替代 JSON
- 为什么Android开发者应该使用FlatBuffers替代JSON?
- J2EE 工程中使用JSON作为协议的话,可以使用Fastjson作为更好的替代了
- Android开发者应该使用FlatBuffers替代JSON?
- firedac数据集控件的公共祖先类——TFDAdaptedDataSet
- php json_encode 替代方法 (亦可显示中文)
- json_decode的替代函数