通用的咏南数据序列、还原类

通用的咏南数据序列、还原类

1)支持DELPHI7及以上版本,更低DELPHI版本没有测试,理论上也支持

2)跨平台:支持WIN32,WIN64,LINUX,MACOS,安卓、IOS

3)支持所有的DELPHI SOCKET控件

4)支持STRING、INTEGER、DATATIME、BOOLEAN等基本数据类型的序列和还原

5)支持文件、流、数据集、BUFFER、结构体等复杂数据类型的序列和还原

6)支持多数据集的序列和还原

 

下面演示如何使用。

1)DATASNAP演示

function TServerMethods1.Query99(const accountNo, sql: string): string;
var
  d: TfrmDB;
  pool: TDBPool;
  serial: TynSerial;
begin
  Result := null;
  if (accountNo = '') or (sql = '') then
    Exit;
  pool := GetDBPool(accountNo);
  if not Assigned(pool) then
    Exit;
  d := pool.Lock;
  if not Assigned(d) then
    Exit;
  serial:= TynSerial.Create;
  try
    try
      SetTraceOn(d);
      d.qryOpen.Close;
      d.qryOpen.sql.Clear;
      d.qryOpen.sql.Text := sql;
      d.qryOpen.Open();
      serial.WriteFDDataSet(d.qryOpen);
      serial.WriteString('str', 'test');
      serial.WriteDateTime('time', Now);
      serial.WriteOleVariant('ole', d.dsp.Data);
      Result := serial.Text;
    except
      on e: Exception do
      begin
        Result := null;
        Log.WriteLog('TServerMethods1.QuerySql ' + e.Message);
      end;
    end;
  finally
    d.qryOpen.Close;
    pool.Unlock(d);
    serial.Free;
    SetTraceOff(d);
  end;
end;

  2)MORMOT演示

class function Tmymethod.querys2(const str: string): string;
// clientdataset主从表查询
var
  pool: TDBPool;
  dm: TfrmDB;
  serial: TynSerial;
  accountno, sql, sql2: string;
begin
  serial := TynSerial.Create;
  try
    try
      serial.Text := str;
      accountno := serial.ReadString('accountno');
      sql := serial.ReadString('sql');
      sql2 := serial.ReadString('sql2');
      serial.Text := '';
      pool := GetDBPool(accountno);
      dm := pool.Lock;

      dm.qryOpen.Close;
      dm.qryOpen.sql.Clear;
      dm.qryOpen.sql.Add(sql);
      serial.WriteOleVariant('dataset', dm.dsp.Data);

      dm.qryOpen.Close;
      dm.qryOpen.sql.Clear;
      dm.qryOpen.sql.Add(sql2);
      serial.WriteOleVariant('dataset2', dm.dsp.Data);

      Result := serial.Text;
    except
      on E: Exception do
      begin
        Result := '';
        Log.WriteLog('Tmymethod.querys ' + E.Message);
      end;
    end;
  finally
    pool.unlock(dm);
    serial.Free;
  end;
end;

  3)CROSS SOCKET演示

function TynFiredac.QuerySQL(const ASQL: string): string;
var
  serial: TynSerial;
begin
  Result := '';
  if ASQL = '' then
    Exit;
  serial := TynSerial.Create;
  try
    try
      FDQuery1.Close;
      FDQuery1.SQL.Clear;
      FDQuery1.SQL.Add(ASQL);
      FDQuery1.Open;
      serial.WriteFDDataSet('dataset', FDQuery1);
      Result := serial.Text;
    except
      on E: Exception do
      begin
        Result := '';
        Log.WriteLog('TynFiredac.QuerySQL ' + E.Message);
      end;
    end;
  finally
    FDQuery1.Close;
    FDConnection1.Close;
    serial.Free;
  end;
end;

  

posted @ 2019-03-20 11:52  delphi中间件  阅读(817)  评论(0编辑  收藏  举报