• ado數據集對象流化與對象還原


    通過網絡傳輸對象之前,必須要對對象進行串行化(流化)處理,然後發送串行化的流。當接收方根據接收到的流還原對象出來。

    function RecordsetToXML(const Recordset: _Recordset): string;

    var

      RS: Variant;

      Stream: TStringStream;

    begin

      Result := '';

      if Recordset = nil then Exit;

      Stream := TStringStream.Create('');

      try

        RS := Recordset;

        RS.Save(TStreamAdapter.Create(stream) as IUnknown, adPersistADTG);

        Stream.Position := 0;

        Result := Stream.DataString;

      finally

        Stream.Free;

      end;

    end;

     

    function RecordsetFromXML(const XML: string): _Recordset;

    var

      RS: Variant;

      Stream: TStringStream;

    begin

      Result := nil;

      if XML = '' then Exit;

      try

        Stream := TStringStream.Create(XML);

        Stream.Position := 0;

        RS := CreateOleObject('ADODB.Recordset');

        RS.Open(TStreamAdapter.Create(Stream) as IUnknown);

        Result := IUnknown(RS) as _Recordset;

      finally

        Stream.Free;

      end;

    end;

    將對象串行化(流化)處理後,必須調用StrToHex()方法格式化字符串,然後進行加密、發送。。。。。。

     

    function TransChar(AChar: Char): Integer;
    begin
      
    if AChar in ['0'..'9'] then
      Result := Ord(AChar) - Ord('0')
      
    else
      Result := 10 + Ord(AChar) - Ord('A');
    end;
    function StrToHex(AStr: string): string;
    var
    I ,Len: Integer;
    s:char;
    begin
      len:=length(AStr);
      Result:='';
      
    for i:=1 to len  do
      
    begin
        s:=AStr[i];
        Result:=Result +' '+IntToHex(Ord(s),2);
    //将字符串转化为16进制字符串,
                                                //并以空格间隔。
      end;
      Delete(Result,1,1);
    //删去字符串中第一个空格
    end;
    function HexToStr(AStr: string): string;
    var
    I,len : Integer;
    CharValue: Word;
    Tmp:
    string;
    s:char;
    begin
      Tmp:='';
      len:=length(Astr);
      
    for i:=1 to len  do
      
    begin
        s:=Astr[i];
        
    if s <> ' ' then Tmp:=Tmp+ string(s);
      
    end;
      Result := '';
      
    For I := 1 to Trunc(Length(Tmp)/2) do
      begin
        Result := Result + ' ';
        CharValue := TransChar(Tmp[2*I-1])*16 + TransChar(Tmp[2*I]);
        
    if (charvalue < 32) or (charvalue > 126)  then Result[I] := '.'   //非可见字符填充
        else Result[I] := Char(CharValue);
      
    end;
    end;

  • 相关阅读:
    +7白盒测试与黑盒测试的定义与区别
    对于逆序数组,,选择排序 和 插入排序 那个更快?
    +1.1向量 链表 数组
    3.2 二十三种设计模式全解析
    3.1软件体系结构风格
    Mysql: 强制走索引:mysql between 日期索引 索引问题-日期索引使用
    php: xampp安装对应的phalcon版本(3.2.2-php5.6):比如redis-php5.6, php_igbinary-5.6
    京东自营,你TM太坑了。
    php:微信公众平台上传多媒体接口 41005错误
    php:如何使用PHP排序, key为字母+数字的数组(多维数组)
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940751.html
Copyright © 2020-2023  润新知