DATASNAP数据序列之FIREDAC的TFDJSONDataSets
2017-09-03 09:03
387 查看
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的过分依赖。
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的过分依赖。
相关文章推荐
- DATASNAP高效的FIREDAC数据序列和还原
- DATASNAP为支持FIREDAC而增加的远程方法的数据类型TFDJSONDataSets
- FIREDAC的TFDJSONDataSets和TFDJSONDeltas查询和提交数据
- OLEVARIANT的替代——FIREDAC的TFDJSONDataSets和TFDJSONDeltas
- firedac的数据序列和还原单元(Data.FireDACJSONReflect.pas)之拷贝FIREDAC数据集
- DATASNAP数据提交之FIREDAC的TFDJSONDeltas
- OLEVARIANT的替代——FIREDAC的TFDJSONDataSets和TFDJSONDeltas
- firedac的数据序列和还原单元(Data.FireDACJSONReflect.pas)之字符串序列和还原
- ext的Ext.data.JsonStore不自动获取数据的问题记录
- Net 3.5 用DataContractJsonSerializer实现Json序列和反序列例子
- JsonDataObjects序列和还原
- ExtJs中grid的dataIndex为传回Json数据的一个对象的一个属性时处理方式
- 从返回的json格式的data数据内随机取得n个
- axios post请求数据,在Content-Type为application/x-www-form-urlencoded情况下,data如何转换为json的解决办法
- DataSnap与JSON序列化(1)
- DataSnap与JSON序列化(2)
- Gson解析 解析包含有data字段的json数据
- easy ui怎么把前台显示的dataGird中的所有数据序列化为json,返回到后台并解析
- 解决Python自带的json不能序列化data,datetime类型数据问题
- .Net 3.5 用DataContractJsonSerializer实现Json序列和反序列