key-value pair序列和还原

key-value pair序列和还原

不论JSON、binary、sql、 nosql数据,都可以使用key-value pair序列和还原。

1.WEBAPI

procedure TCRUD.Select(const ARequest: THttpRequest;
  const AResponse: THttpResponse);
var
  LDB: TDB;
  LPool: TDBPool;
  LRequestData, LResponseData: TJsonO;
  i: Integer;
begin
  LRequestData := TRequestFunc.UnMarshal(ARequest);
  if LRequestData = nil then
    Exit;
  LResponseData := TJsonO.Create;
  try
    try
      LPool := GetDBPool(LRequestData.S['dbid']);
      LDB := LPool.Lock;
      LResponseData.B['success'] := True;
      LResponseData.S['message'] := TConst.SelectSuccess;
      for i := 0 to LRequestData.i['count'] - 1 do
      begin
        LDB.Select(LRequestData.S['sql' + i.ToString]);
        LResponseData.A['fields' + i.ToString] := LDB.qry.FieldsToJsonArray;
        LResponseData.A['data' + i.ToString] := LDB.qry.DataToJsonArray;
      end;
      TResponseFunc.Send(AResponse, LResponseData);
    except
      on E: Exception do
      begin
        LResponseData.B['success'] := False;
        LResponseData.S['message'] := E.Message;
        TResponseFunc.Send(AResponse, LResponseData);
        WriteLog('TWebApi.Select()' + E.Message);
      end;
    end;
  finally
    LPool.Unlock(LDB);
    LRequestData.Free;
  end;
end;

2.二进制接口

procedure TFDMem.Select(const ARequest: THttpRequest;
  const AResponse: THttpResponse);
var
  LRequestData, LResponseData: TData;
  LPool: TDBPool;
  LDB: TDB;
  i: Int;
  LStream: TStream;
begin
  LRequestData := TData.Create;
  LResponseData := TData.Create;
  try
    try
      TRequestFunc.UnMarshal(ARequest, LRequestData);
      LPool := GetDBPool(LRequestData.S[TConst.DBId]);
      LDB := LPool.Lock;
      for i := 0 to LRequestData.i[TConst.Count] do
      begin
        LStream := LDB.select3(LRequestData.S['sql' + i.ToString]);
        LResponseData.Stream['data' + i.ToString] := LStream;
        LStream.Free;
      end;
      LResponseData.B[TConst.Success] := True;
      TResponseFunc.Send(AResponse, LResponseData);
    except
      on E: Exception do
      begin
        LResponseData.B[TConst.Success] := False;
        LResponseData.S[TConst.Msg] := E.Message;
        TResponseFunc.Send(AResponse, LResponseData);
        WriteLog('TFDMem.Select()' + E.Message);
      end;
    end;
  finally
    LPool.Unlock(LDB);
    LRequestData.Free;
  end;
end;

 

posted @ 2025-09-07 15:55  delphi中间件  阅读(18)  评论(0)    收藏  举报