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;varI ,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;varI,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;
本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/archive/2009/10/19/2940751.html

浙公网安备 33010602011771号