• datasnap远程方法支持自定义对象传参


    有同仁需要远程方法传输自定义的数据类型,他以为要自己写代码会很复杂,其实DATASNAP早就为我们想到了。

    datasnap的数据序列和还原真是无与伦比的强大,其远程方法支持自定义对象传参,DATASNAP会自动使用JSON序列和还原自定义的对象。

    1)自定义一个对象

    type
    TMyInfo = class(TObject)
    public
    AccountNo: string;
    SQL: string;
    Params: string;
    RecsMax: Integer;
    end;

    2)服务端远程方法定义

    function TServerMethods1.QuerySql4(const myInfo: TMyInfo): TFDJSONDataSets;
    var
    d: TfrmDB;
    i, iPos: Integer;
    sl: TStringList;
    LName, LValue, LStr: string;
    p: TFDParam;
    begin
    Result := nil;
    if not Assigned(myInfo) then
    Exit;
    if (myInfo.AccountNo = '') or (myInfo.SQL = '') then
    Exit;
    d := GetDBPool(myInfo.AccountNo).Lock;
    if not Assigned(d) then
    Exit;
    try
    try
    d.qryOpen.Close;
    d.qryOpen.sql.Clear;
    d.qryOpen.sql.Text := myInfo.SQL;
    if myInfo.Params <> '' then
    begin
    sl := TStringList.Create;
    try
    sl.Delimiter := ';';
    sl.DelimitedText := myInfo.Params;
    for i := 0 to sl.Count - 1 do
    begin
    LStr := sl.Strings[i];
    iPos := Pos(':', LStr);
    LName := LeftStr(LStr, iPos - 1);
    LValue := RightStr(LStr, Length(LStr) - iPos);
    p := d.qryOpen.FindParam(LName);
    if p <> nil then
    p.Value := LValue;
    end;
    finally
    sl.Free;
    end;
    end;
    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(myInfo.AccountNo).Unlock(d);
    end;
    end;

    3)客户端调用

    procedure TForm1.Button3Click(Sender: TObject);
    var
    LDataSets: TFDJSONDataSets;
    LDataSet: TFDDataSet;
    myInfo: TMyInfo;
    begin
    myinfo := TMyInfo.Create;
    myInfo.AccountNo := '0';
    myInfo.SQL := 'select * from t1 where c1=:c1';
    myInfo.Params := 'c1:55';
    LDataSets := methods.QuerySql4(myInfo);
    LDataSet := TFDJSONDataSetsReader.GetListValueByName(LDataSets, '1');
    FDMemTable1.Close;
    FDMemTable1.Data := LDataSet;
    end;

  • 相关阅读:
    大规模分布式存储系统笔记一二章 概述与单机存储系统
    Apache Avro总结
    可汗学院公开课统计学笔记 第11到16集 样本 总体 方差 标准差 诸方差公式
    可汗学院公开课统计学笔记 第1到10集 均值 中位数 众数 极差 统计图
    Mock、Powermock使用汇总
    如何解决NoSuchMethodError
    2019年我看手机之华为篇
    活着
    log4j使用指北
    关于Eclipse导入maven项目报空指针异常
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/5728320.html
Copyright © 2020-2023  润新知