zoukankan      html  css  js  c++  java
  • DATASNAP数据序列之FIREDAC的TFDJSONDataSets

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

  • 相关阅读:
    java实验二
    实验1
    响应式站点设计之使用指南
    掌管一个网站?给你九条忠告
    在本地App上设计Web代码
    订阅
    下载站焦点图
    个性化电影频道js
    展开收起播放列表
    onoff组件
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/7468758.html
Copyright © 2011-2022 走看看