zoukankan      html  css  js  c++  java
  • 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;

  • 相关阅读:
    javaweb(五)——Servlet开发(一)
    JDK1.8改为JDK1.7过程
    javaweb(四)——Http协议(请求头,响应头详解)
    JavaWeb(三)——Tomcat服务器(二)
    JavaWeb(二)——Tomcat服务器(一)
    JavaWeb——JavaWeb开发入门
    java学习之异常总结
    java学习之异常之覆盖
    java学习之异常之格式
    java学习之异常之finally
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/5728320.html
Copyright © 2011-2022 走看看