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

时间: 2024-10-10 23:08:49

DATASNAP数据序列之FIREDAC的TFDJSONDataSets的相关文章

DATASNAP数据提交之FIREDAC的TFDJSONDeltas

FIREDAC的TFDJSONDeltas相当于CLIENTDATASET的DELTA,是作为CLIENTDATASET.DELTA的替代者出现的. TFDJSONDeltas是多个数据集DELTA的集合,一次性可以提交多个数据集修改后的数据到数据库. 服务端代码: function TServerMethods1.SaveData2(const accountNo, tableName: string; delta: TFDJSONDeltas): Boolean;var d: TfrmDB;

matlab数据序列的几种滤波器

一维数据序列滤波的matlab代码, 其实和之前做的图像滤波大同小异, 只是图像的噪声情况复杂得多, 而且是二维的. 做这个主要是手上有个心电的的mens传感器, 蓝牙把数据传过来做一个数据的100Hz左右的带通滤波, 用butterworht做个带通滤波, 再用c语言重构一下. 1 %**************************************************************************************** 2 % 3 % 创建两个信号Mix

java 使用xom对象数据序列化为xml、反序列化、Preferences相关操作小案例

package org.rui.io.xml; import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.util.Arrays; import java.util.List; import nu.xom.Document; import nu.

ARIMA模型——如果数据序列是非平稳的,并存在一定的增长或下降趋势,则需要对数据进行差分处理!ARIMA(p,d,q)称为差分自回归移动平均模型,AR是自回归, p为自回归项; MA为移动平均,q为移动平均项数,d为时间序列成为平稳时所做的差分次数

ARIMA模型全称为自回归积分滑动平均模型(Autoregressive Integrated Moving Average Model,简记ARIMA),是由博克思(Box)和詹金斯(Jenkins)于70年代初提出一著名时间序列(Time-series Approach)预测方法 [1]  ,所以又称为Box-Jenkins模型.博克思-詹金斯法.其中ARIMA(p,d,q)称为差分自回归移动平均模型,AR是自回归, p为自回归项: MA为移动平均,q为移动平均项数,d为时间序列成为平稳时所

FIREDAC的TFDJSONDataSets和TFDJSONDeltas查询和提交数据

服务端代码: uses Data.FireDACJSONReflect, FireDAC.Stan.Storage, FireDAC.Stan.StorageBin, FireDAC.Stan.StorageJSON, FireDAC.Stan.StorageXML; 1)查询 function TServerMethods1.QuerySql2(const accountNo, sql: string): TFDJSONDataSets;var d: TfrmDB;begin Result :

FIREDAC的TFDJSONDataSets和TFDJSONDeltas

一)服务器端代码演示1)常量定义:const sDepartment = 'Department'; sEmployees = 'Employees'; 2)查询数据: function TServerMethods1.GetDepartmentEmployees(const AID: string): TFDJSONDataSets; begin // Clear active so that query will reexecute. FDQueryDepartmentEmployees.A

优秀的数据序列和还原类----TSimpleMsgPack

有了它,从此数据的序列和还原不再是梦魔. 适用极广:可以适用于所有版本的DELPHI,不论D7还是最新的XE10.1,都支持.激动! 封装极简:完全独立的一个单元即可,不需引用任何其它的单元. 用法极简:调用非常简单. 其支持的序列的数据格式非常丰富. 下面列出该类的一些常用的接口方法: procedure LoadBinaryFromStream(pvStream: TStream; pvLen: cardinal = 0); procedure SaveBinaryToStream(pvSt

大幅提升Delphi Datasnap数据传输效率的方法

方法一:增加TCP读写缓存的大小       DataSnap Server中负责TCP/IP通讯的组件是TDSTCPServerTransport,它默认的TCP/IP读写缓冲区的大小为32KB,由BufferKBSize属性来设置.测试结果显示,这个默认的缓冲区大小,只适合返回很小的数据集的情况,在返回较大的数据集.或者上传文件到数据库/从数据库下载文件等情况下,会造成严重的数据传输效率低下的问题,与正常情况相比可达到了十几倍的差距,把缓冲区的大小调整到512KB甚至更高一点就能解决此问题.

python学习笔记4--装饰器、生成器、迭代器、匿名函数、内置方法、数据序列话

一.装饰器 1.意义:当需要给程序中某些函数新增某项功能时,为了避免直接修改函数源代码和函数调用方式,所以引入装饰器. 2.定义:装饰器用于装饰其他函数,就是为其他函数提供附加功能. 3.原则: 1)不修改被装饰的函数的源代码 2)不修改被装饰的函数的调用方式 4.装饰器储备知识: 1)函数即变量 2)高阶函数 a.把函数当做参数传递给另一个函数(在不修改被修饰函数源代码的情况下为该函数添加功能) b.返回值中包含函数名(在不修改被修饰的函数的调用方式的情况下为该函数添加功能) 3)嵌套函数:在