我打算在ClientDataSet的BeforeGetRecords\afterGetRecords和DataSetProvider的相应事件中进行加密和解密操作,但现在有个问题就是加密后的数据可能出现特殊字符如chr(160),在封包的过程中出现了丢失字符的问题,还请各位帮忙!
代码如下:
procedure TForm1.ClientDataSet1BeforeGetRecords(Sender: TObject;
var OwnerData: OleVariant);
var
s: Ansistring;
i:integer;
begin
s := ClientDataSet1.CommandText;
s := encrypt(s,12345); //加密
OwnerData := VarArrayOf([s]); //封包
end;procedure TForm1.DataSetProvider1BeforeGetRecords(Sender: TObject;
var OwnerData: OleVariant);
var
s: Ansistring;
i:integer;
begin
try
SQLQuery1.Close;
s := OwnerData[0]; //解包
s := Decrypt(s,12345);//解密
showmessage(s);
SQLQuery1.SQL.Text :=s;
SQLQuery1.Open;
finally
OwnerData := NULL;
end;end;不知道各位有没有遇到这个问题,怎么解决的?十万分感谢!!
代码如下:
procedure TForm1.ClientDataSet1BeforeGetRecords(Sender: TObject;
var OwnerData: OleVariant);
var
s: Ansistring;
i:integer;
begin
s := ClientDataSet1.CommandText;
s := encrypt(s,12345); //加密
OwnerData := VarArrayOf([s]); //封包
end;procedure TForm1.DataSetProvider1BeforeGetRecords(Sender: TObject;
var OwnerData: OleVariant);
var
s: Ansistring;
i:integer;
begin
try
SQLQuery1.Close;
s := OwnerData[0]; //解包
s := Decrypt(s,12345);//解密
showmessage(s);
SQLQuery1.SQL.Text :=s;
SQLQuery1.Open;
finally
OwnerData := NULL;
end;end;不知道各位有没有遇到这个问题,怎么解决的?十万分感谢!!
使用VarArrayHighBound会提示参数错误,我不能得到OleVariant的长度也就不能取出数据了。
有没有这方面的程序代码?[email protected] 非常感谢!
function GetEncodedBase64(const AFileName:string):string; //ѹËõÎļþ
var
ass,ass1:tstringstream;
amm,amm1:tmemorystream;
strtemp:string;
mscompressedstream:tcompressionstream;
begin
ass:=tstringstream.Create('');
amm:=tmemorystream.Create ;
ass1:=tstringstream.Create('');
amm1:=tmemorystream.Create ; try
amm.LoadFromFile(afilename);
amm.SaveToStream(ass);
strtemp:=ass.DataString;
try
mscompressedstream:=tcompressionstream.Create(cldefault,amm1);
mscompressedstream.Write(strtemp[1],length(strtemp));
finally
mscompressedstream.Free ;
end;
amm1.Position :=0;
amm1.SaveToStream(ass1);
//encodestream(amm1,ass1);
result:=encodestring(ass1.DataString);
finally
amm.Free;
ass.Free;
amm1.Free;
ass1.Free ;
end;end;function GetDecodedBase64(SourceStr:string):string; //µÃµ½½âѹºóµÄ×Ö·û!
var
ass:tstringstream;
amm,amm1:tmemoryStream;
uncompressed:tdecompressionstream;
fbuflen:integer;
fbuffer:array[0..16383] of byte;
begin
amm:=tmemoryStream.create;
amm1:=tmemoryStream.create;
ass:=tstringstream.Create(decodestring(SourceStr));
amm1.LoadFromStream(ass);
try
amm.Size :=0;
amm1.Position :=0;
uncompressed:=tdecompressionstream.Create(amm1);
try
fbuflen:= uncompressed.Read(fbuffer,sizeof(fbuffer));
while fbuflen>0 do
begin
amm.Write(fbuffer,fbuflen); fbuflen:=uncompressed.Read(fbuffer,sizeof(fbuffer));
end;
finally
uncompressed.Free ;
end; amm.Position :=0;
setlength(result,amm.size);
move(amm.memory^,result[1],amm.Size ); finally
ass.Free ;
amm.Free ;
amm1.Free ;
end;end;