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的替代——FIREDAC的TFDJSONDataSets和TFDJSONDeltas的更多相关文章
- FIREDAC的TFDJSONDataSets和TFDJSONDeltas查询和提交数据
服务端代码: uses Data.FireDACJSONReflect, FireDAC.Stan.Storage, FireDAC.Stan.StorageBin, FireDAC.Stan.Sto ...
- DATASNAP数据序列之FIREDAC的TFDJSONDataSets
DATASNAP数据序列之FIREDAC的TFDJSONDataSets DELPHI XE5开始增加了新的数据引擎——FIREDAC,它是跨平台的数据引擎,WINDOWS.LINUX.MAC.APP ...
- DATASNAP数据提交之FIREDAC的TFDJSONDeltas
DATASNAP数据提交之FIREDAC的TFDJSONDeltas FIREDAC的TFDJSONDeltas相当于CLIENTDATASET的DELTA,是作为CLIENTDATASET.DELT ...
- 论DATASNAP结合FIREDAC的使用方法
论DATASNAP结合FIREDAC的使用方法 自DELPHI XE5开始引入FIREDAC数据引擎以来,FIREDAC就正式成为了官方的数据引擎.一直到XE10.1 UPDATE1,据笔者观察,FI ...
- DATASNAP为支持FIREDAC而增加的远程方法的数据类型TFDJSONDataSets
前面的博客提到用FIREDAC全面替代COM那一套东西:DATAPROVIDER,OLEVARIANT,CLIENTDATASET,DBEXPRESS... 显然,DATASNAP的远程方法必须增加对 ...
- DataSnap 多层返回数据集分析FireDAC JSON
采用服务器返回数据,一种是返回字符串数据例如JSON,跨平台跨语言,任何语言调用都支持兼容,类似WEBService. 第二种是紧密结合c++builder语言,传输DataSet,可以是Client ...
- DataSnap与FireDAC三层
相交资料: http://blog.csdn.net/shuaihj/article/details/6129131http://www.cnblogs.com/hnxxcxg/p/4007876.h ...
- FireDAC探索 (二)
又花时间试了试FireDAC,本想找到一些办法,让FireDAC取数据能和DBX样快,最终还是失败了,DBX实现是太快了,3472第记录(110个字段的表),0毫秒就抓过来了, FireDAC最快也要 ...
- FireDac 组件说明一
TFDManager 连接定义和Connect连接管理 TFDConnection 数据库连接组件,支持三种连接方式:1.持久定义(有一个唯一名称和一个配置文件,可以由FDManager管理) 例: ...
随机推荐
- eclipse运行emulator时,PANIC:Could not open emulator的解决办法
使用eclipse启动emulator的时候,出现PANIC:Could not open emulator,模拟器无法正常的运行. 经过搜索得知,因为我的SDK的环境变量出问题,需要重新配置下环境变 ...
- build path功能详解
在项目上右键>Build path>Config build path “web project”中,一般把"src"设置为source folder,把WEB-INF ...
- ASP.NET MVC 学习3、Controller左手从Model获取数据,右手传递到View页面
参考:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/accessing-your-models-dat ...
- Flexigrid自定义显示数据列
近期在搞ExtJs,发现ExJs的Grid相当的强大,后来又搞Jquery时,就对原来的表格不怎么满意了,于是,花了点时间,从网上找了个Grid插件,这个插件功能是比较强大,什么行排序.筛选.分页都有 ...
- WTL汉化版2013.10.15
汉化内容: 2013.10.15 版本:当前可下载Trunk最新版,wtl-code-467-trunk.zip 汉化内容: 1.应用向导的部分汉化,考虑到部分词汇的表述问题,只汉化无影响部分 2.资 ...
- ActionBarSherlock的学习笔记(二) ------------ 创建ActionBarSherlock
将ActionBarSherlock 作为库项目添加到当前的项目中去,然后创建ActionBar,并自定义ActionBar的标题栏 例子如下: import android.os.Bundle; i ...
- 【转】Intel HEX介绍
记录格式 Intel HEX由任意数量的十六进制记录组成.每个记录包含5个域,它们按以下格式排列: :llaaaatt[dd...]cc 每一组字母对应一个不同的域,每一个字母对应一个十六进制编码的数 ...
- codeforces 681D Gifts by the List dfs+构造
题意:给你一个森林,表示其祖先关系(自己也是自己的祖先),每个人有一个礼物(要送给这个人的固定的一个祖先) 让你构造一个序列,使得的对于每个人,这个序列中第一个出现的他的祖先,是他要送礼物的的那个祖先 ...
- sql语句中获取datetime任何部分
sql语句中获取datetime的日期部分 sql语句中 经常操作操作datetime类型数据.今天在写一个存储过程的时候需要将 一个datetime的值的 日期部分提取出来.网上有许多这方面的介绍. ...
- 【windows核心编程】一个HOOK的例子
一.应用场景 封装一个OCX控件,该控件的作用是来播放一个视频文件,需要在一个进程中放置四个控件实例. 由于控件是提供给别人用的,因此需要考虑很多东西. 二.考虑因素 1.控件的父窗口resize时需 ...