字符串转化成二进制存入数据库,取出再转化二进制???(100分)

  • 主题发起人 主题发起人 haj77
  • 开始时间 开始时间
H

haj77

Unregistered / Unconfirmed
GUEST, unregistred user!
将字段定义成Binary后,若有长度为2384个的字符串,将其转化成二进制后,存入
Binary字段中,取出时,再将二进制转化成字符串,如何放入数据库?如何取出?
其Delphi如何写语句?急!急!急!
 
老兄:这是您要的答案,我已经调试通过了。其中EncryptKey是加密算法,DecodeKey是解密
酸法,您不要研究。
请给分!
procedure TForm1.btWriteClick(Sender: TObject);
var
strPass:String;
arrByte:array of Byte;
i:integer;
begin
{
CREATE PROCEDURE sp_WriteUser
@Name varchar(16),
@Password binary(255)
AS
INSERT INTO Users(Name,Password) VALUES (@Name,@Password)
}
SetLength(arrByte,255);
if Length(edtName.Text)=0 then
begin
edtName.SetFocus;
Exit;
end;
if Length(edtWP.Text)<6 then
begin
edtWP.SelectAll;
edtWP.SetFocus;
Exit;
end;
strPass:=EncryptKey(edtWP.Text);
edtRP.Text:=IntToStr(Length(strPass));
for i:=1 to 255 do
begin
arrByte[i-1]:=Byte(strPass);
end;
adosp.ProcedureName:='sp_WriteUser';
adosp.Parameters.Clear;
adosp.Parameters.CreateParameter('@Name',ftString,pdInput,16,edtName.Text);
adosp.Parameters.CreateParameter('@Password',ftBytes,pdInput,255,arrByte);
adosp.ExecProc;
if dst.Active then
dst.Refresh
else
dst.Open;
end;

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
if dst.Active then
begin
edtName.Text:=dst.FieldByName('Name').AsString;
end;
end;

procedure TForm1.btReadClick(Sender: TObject);
var
strPass:String;
arrByte:array of Byte;
i:Integer;
begin
SetLength(strPass,255);
SetLength(arrByte,255);
adosp.ProcedureName:='sp_ReadUser';
{
CREATE PROCEDURE sp_ReadUser
@Name varchar(16),
@Password binary(255) output
AS
SELECT @Password=(SELECT Password FROM Users WHERE Name=@Name)
}
adosp.Parameters.Clear;
adosp.Parameters.CreateParameter('@Name',ftString,pdInput,16,edtName.Text);
adosp.Parameters.CreateParameter('@Password',ftBytes,pdoutput,255,'');
adosp.ExecProc;
arrByte:=adosp.Parameters.ParamValues['@Password'];
i:=Length(strPass);
edtWP.Text:=IntToStr(i);
strPass:=string(arrByte);
edtRP.Text:=DecodeKey(strPass);
end;
 
在D4以上,给你两个函数

Procedure StrToByteS(const Str:String;var NameArr :Array of byte);
var I,J :Integer;
Begin
FillChar(NameArr,high(NameArr)+1,0);
if length(Str) >high(NameArr) then J :=high(NameArr)
else J :=length(Str);
For I:=1 to J do NameArr[I-1]:=byte(Str);
End;

Function ByteToStr (NameArr :Array of byte):String;
var I:Integer;
S:String;
Begin
Setlength(S,High(NameArr)+1);
For I:=Low(NameArr) to High(NameArr) do S[I+1]:=Char(NameArr);
Result :=Pchar(S);
End;
 
高手!正需要!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
916
SUNSTONE的Delphi笔记
S
后退
顶部