OLEVARIANT的替代——FIREDAC的TFDJSONDataSets和TFDJSONDeltas

转载 2015年07月09日 21:12:00
OLEVARIANT的替代——FIREDAC的TFDJSONDataSets和TFDJSONDeltas
OLEVARIANT——这个COM的序列格式,也是DATASNAP已使用了20年的序列格式,
在20年以后的今天,终于有了它的替代者:FIREDAC的TFDJSONDataSets和TFDJSONDeltas,XE5 UPDATE2以上版本的DATASNAP的远程方法定义里面已经增加了这2种类型的支持。
FIREDAC的TFDCONNECTION尚没有“GENERATE DATASNAP CLIENT CLASSES”的项,感觉不方便,笔者测试的时候使用TSQLCONNECTION生成的客户端代理类,
易博龙稍后是否会提供?不得而知。
TFDJSONDataSets:数据集对象列表,可包含N个数据集对象,不论是单表查询或多表查询(主从表)的数据都用这种类型返回给客户端。
TFDJSONDeltas:客户端数据集的DELTA列表,可包含N个DELTA,不论是单表提交或多表提交(主从表)的数据都用这种类型提交给服务端。

为什么要有替代品?
DATASNAP为了完全去除对COM的依存,为了能跨平台。
替代者的性能是否强于OLEVARIANT?
笔者未作测试对比,不敢断言。
下面分别给出服务端和客户端的演示代码。

一)服务器端代码演示
1)常量定义:
const
  sDepartment = 'Department';
  sEmployees = 'Employees';

2)查询数据:

function TServerMethods1.GetDepartmentEmployees(const AID: string): TFDJSONDataSets;
begin
  // Clear active so that query will reexecute.
  FDQueryDepartmentEmployees.Active := False;
  FDQueryDepartment.Active := False;
  FDQueryDepartment.Params[0].Value := AID;
  FDQueryDepartmentEmployees.Params[0].Value := AID;
 
   // Create dataset list
  Result := TFDJSONDataSets.Create;
   // Add departments dataset
  TFDJSONDataSetsWriter.ListAdd(Result, sDepartment, FDQueryDepartment);
    // Add employees dataset
  TFDJSONDataSetsWriter.ListAdd(Result, sEmployees, FDQueryDepartmentEmployees);
end;
TFDJSONDataSets,FIREDAC的数据集列表对象,可返回多个数据集。

3)提交数据:
procedure TServerMethods1.ApplyChangesDepartmentEmployees(
  const ADeltaList: TFDJSONDeltas);
var
  LApply: IFDJSONDeltasApplyUpdates;
begin
  // Create the apply object
  LApply := TFDJSONDeltasApplyUpdates.Create(ADeltaList);
  // Apply the department delta
  LApply.ApplyUpdates(sDepartment, FDQueryDepartment.Command);
  if LApply.Errors.Count = 0 then
    // If no errors, apply the employee delta
    LApply.ApplyUpdates(sEmployees, FDQueryDepartmentEmployees.Command);
  if LApply.Errors.Count > 0 then
    // Raise an exception if any errors.
    raise Exception.Create(LApply.Errors.Strings.Text);
end;

二)客户端演示代码
1)查询数据:
procedure TForm2.GetDepartmentEmployees(const ADEPTNO: string);
var
    LDataSetList: TFDJSONDataSets;
    LDataSet: TFDDataSet;
begin
    LDataSetList := ClientModule1.ServerMethods1Client.GetDepartmentEmployees(ADEPTNO);
    // Get department dataset
    LDataSet := TFDJSONDataSetsReader.GetListValueByName(LDataSetList,sDepartment);
    // Update UI
    FDMemTableDepartment.Active := False;
    FDMemTableDepartment.AppendData(LDataSet);
 
    // Get employees dataset
    LDataSet := TFDJSONDataSetsReader.GetListValueByName(LDataSetList, sEmployees);
    // Update UI
    FDMemTableEmployee.Active  := False;
    FDMemTableEmployee.AppendData(LDataSet);
end;
2)提交数据:
function TForm2.GetDeltas: TFDJSONDeltas;
begin
  // Post if editing
  if FDMemTableDepartment.State in dsEditModes then
  begin
    FDMemTableDepartment.Post;
  end;
 
  if FDMemTableEmployee.State in dsEditModes then
  begin
    FDMemTableEmployee.Post;
  end;
 
  // Create a delta list
  Result := TFDJSONDeltas.Create;
  // Add deltas
  TFDJSONDeltasWriter.ListAdd(Result, sEmployees, FDMemTableEmployee);
  TFDJSONDeltasWriter.ListAdd(Result, sDepartment, FDMemTableDepartment);
end;


procedure TForm2.ApplyUpdates;
var
  LDeltaList: TFDJSONDeltas;
begin
  LDeltaList := GetDeltas;
 
  // Call server method.  Pass the delta list.
  ClientModule1.ServerMethods1Client.ApplyChangesDepartmentEmployees(LDeltaList);
 
end;

注意:
服务端和客户端都要放置2个控件:
TFDStanStorageJSONLink
 TFDStanStorageBinLink

相关文章推荐

转换OLEVariant和TMemoryStrea

  • 2012年08月06日 21:59
  • 1KB
  • 下载

如何在Delphi中使用Microdraw图形控件的OLEVariant类型数据

MicroDraw图形控件可以嵌入到网页内运行,实现步骤如下: 1. 首先需要正确的生成CAB文件(MicroDraw.CAB)并进行数字签名; 最新版CAB包下载地址:http:/...
  • kingup
  • kingup
  • 2011年05月08日 16:11
  • 977

Delphi中关于OleVariant 自动化变量的一点小小的认识(原发于2007-6-13)

记下我的经历,希望对你有用。 上个星期,因为要帮老师带CAN总线的实验,买的是北京三纯科技的CAN总线的接口卡和CAN总线PCI 的接口卡。实验要我自己想如何做。晕。不过没有办法。想来想去,...
  • semilog
  • semilog
  • 2012年08月15日 19:49
  • 950

Delphi FireDac 之SQL跟踪

我们都知道sqlserver 管理工具 提供了Trace跟踪,可以跟踪程序执行了那些sql语句,非常的方便,今天我们自己用FireDac 来实现这个功能吧 要实现sql语句的跟踪,我们需要用到 TF...

Delphi xe10 FireDac 之 如何生成操作日志

在开发软件中,记录软件的操作日志 是很有必要的,一来可以查找错误,二来可以优化性能,三来呢 要是碰到客户死活不承认这样操作,说你们软件又问题,打开数据库一查日志。。。。     要记录操作日志就要说...

DataSnap 多层返回数据集分析FireDAC JSON

DataSnap 多层返回数据集分析FireDAC JSON 转自:http://www.cnblogs.com/cb168/p/4281155.html采用服务器返回数据,一种是返回字符串数据例如...
  • xieyunc
  • xieyunc
  • 2017年03月27日 22:29
  • 1079

FireDAC操作SQLite例子

  • 2017年01月19日 17:34
  • 3.78MB
  • 下载

FireDAC简易教程

FireDAC简易教程(Delphi)   一、VCL下的FireDAC   1.创建数据库连接: 新建一个VCL Forms Application工程,放置一个TFDConnection控件,设置...
  • ooooh
  • ooooh
  • 2016年01月20日 21:31
  • 4268
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OLEVARIANT的替代——FIREDAC的TFDJSONDataSets和TFDJSONDeltas
举报原因:
原因补充:

(最多只允许输入30个字)