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.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

 
 
时间: 2024-11-11 09:45:54

FIREDAC的TFDJSONDataSets和TFDJSONDeltas的相关文章

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 :

DATASNAP数据序列之FIREDAC的TFDJSONDataSets

DELPHI XE5开始增加了新的数据引擎——FIREDAC,它是跨平台的数据引擎,WINDOWS.LINUX.MAC.APP......都可以使用. 随之DATASNAP也增加了新的远程方法返回数据类型——TFDJSONDataSets. 顾名思义TFDJSONDataSets是数据集列表,是多个数据集的集合,DATASNAP通过它一次可以返回多个查询结果数据集. 服务端代码: function TServerMethods1.QuerySql2(const accountNo, sql: s

论DATASNAP结合FIREDAC的使用方法

自DELPHI XE5开始引入FIREDAC数据引擎以来,FIREDAC就正式成为了官方的数据引擎.一直到XE10.1 UPDATE1,据笔者观察,FIREDAC都是新版本开发当中的重中之重,其在DELPHI的地位自然是不言而喻. DATASNAP结合FIREDAC,中间件远程方法支持的数据序列格式可谓是丰富多彩.已经不仅仅是只支持OLEVARIANT格式序列.下面且听本人一一道来. 1)OLEVARIANT仍然得到继续支持,这使得成千上万的老程序继续得以绽放异彩.使用的方法大致如下:中间件:f

DATASNAP为支持FIREDAC而增加的远程方法的数据类型TFDJSONDataSets

前面的博客提到用FIREDAC全面替代COM那一套东西:DATAPROVIDER,OLEVARIANT,CLIENTDATASET,DBEXPRESS... 显然,DATASNAP的远程方法必须增加对FIREDAC数据集直接序列的参数类型. 从XE5的UPDATE2开始增加一个新的单元文件:Data.FireDACJSONReflect TFDJSONDataSets是一个数据集列表对象,顾名思义可以返回一个或多个数据集对象,不论是单表或者主从表数据都可传递. 服务端演示代码: function

DATASNAP数据提交之FIREDAC的TFDJSONDeltas

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

FireDAC探索 (二)

又花时间试了试FireDAC,本想找到一些办法,让FireDAC取数据能和DBX样快,最终还是失败了,DBX实现是太快了,3472第记录(110个字段的表),0毫秒就抓过来了, FireDAC最快也要将近20毫秒.不过FireDAC已经把数据抓到TFDDatSTable中,知道记录条数了,(比DBX要强,DBX的DBXReader是不知道记录数的) 如果只是让FDCommand执行SQL后,不Feach到TFDDatSTable, 那么也是0毫秒(但读取不了数据的). 除此之外, FDMemTa

DataSnap与FireDAC三层

相交资料: http://blog.csdn.net/shuaihj/article/details/6129131http://www.cnblogs.com/hnxxcxg/p/4007876.htmlhttp://www.cnblogs.com/hnxxcxg/p/4008789.htmlhttp://www.dfwlt.com/forum.php?mod=viewthread&tid=729 (生成Unit2) PS: 右键点击TSQLConnection选择“Generate Data

将 FireDAC Detal 转换为 SQL

以下代码实现如何将 FireDAC Detal 转换为 SQL 1 function TFDDataSetHelper.DeltaToSQL(const AKeyFields: string): string; 2 var 3 Row, Col: Integer; 4 DatSRow: TFDDatSRow; 5 DataType: TFDDataType; 6 OldValue, NewValue: string; 7 FieldNames, Values, SqlWhere, TableNa

3.FireDAC组件快照

TFDManager 连接定义和Connect连接管理  TFDConnection 数据库连接组件,支持三种连接方式:1.持久定义(有一个唯一名称和一个配置文件,可以由FDManager管理) 例: uses   FireDAC.Comp.Client, FireDAC.Stan.Intf; var   oDef: IFDStanConnectionDef; begin   oDef := FDManager.ConnectionDefs.AddConnectionDef;   oDef.Na