请问:以下代码哪儿出错?
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
i:integer;
AChar:char;
MemStreamA:TMemoryStream;
MemStreamB:TMemoryStream;
begin MemStreamA:=TMemoryStream.Create;
MemStreamB:=TMemoryStream.Create;
RichEdit1.Lines.SaveToStream(MemStreamA);
for i := 0 to MemStreamA.Size-1 do
begin
MemStreamA.Position:=i;
MemStreamB.Position:=i;
MemStreamA.Read(AChar,1);
AChar:=chr(ord(AChar) xor $61);//异或加密,数字可自定,在$00-$FF之间,同解密数字 MemStreamb.Write(AChar,1);
end;
richedit1.Lines.LoadFromStream(memstreamb);
MemStreamA.Free;
MemStreamB.Free;
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('INSERT INTO diray VALUES(:rj)');
adoquery1.Parameters.ParamByName('rj').value:=richedit1.text;
adoquery1.execsql;
end;运行后,点保存,出错提示为:diray('rj')不能是零长度的字符串,急!请各位高手务必帮忙,先谢了。
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
i:integer;
AChar:char;
MemStreamA:TMemoryStream;
MemStreamB:TMemoryStream;
begin MemStreamA:=TMemoryStream.Create;
MemStreamB:=TMemoryStream.Create;
RichEdit1.Lines.SaveToStream(MemStreamA);
for i := 0 to MemStreamA.Size-1 do
begin
MemStreamA.Position:=i;
MemStreamB.Position:=i;
MemStreamA.Read(AChar,1);
AChar:=chr(ord(AChar) xor $61);//异或加密,数字可自定,在$00-$FF之间,同解密数字 MemStreamb.Write(AChar,1);
end;
richedit1.Lines.LoadFromStream(memstreamb);
MemStreamA.Free;
MemStreamB.Free;
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('INSERT INTO diray VALUES(:rj)');
adoquery1.Parameters.ParamByName('rj').value:=richedit1.text;
adoquery1.execsql;
end;运行后,点保存,出错提示为:diray('rj')不能是零长度的字符串,急!请各位高手务必帮忙,先谢了。
MemStreamA.Position:=0;
MemStreamB.Position:=0;
for i := 0 to MemStreamA.Size-1 do
begin
// MemStreamA.Position:=i;
// MemStreamB.Position:=i; 不用, 去掉
...
MemStreamB.Position:=0; //加這個
richedit1.Lines.LoadFromStream(memstreamb);
要不,再看这:
var
str1,str2,str3:string;
i:integer;
AChar:char;
MemStreamA:TMemoryStream;
MemStreamB:TMemoryStream;
begin
str1:='2004';
str2:='4'
str3:='14';
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from diray');
adoquery1.SQL.Add('where year=:str3 and month=:str2 and day=:str1');
adoquery1.Parameters.ParamByName('str3').Value:=str3;
adoquery1.Parameters.ParamByName('str2').Value:=str2;
adoquery1.Parameters.ParamByName('str1').Value:=str1;
adoquery1.Open;
end;
MemStreamA:=TMemoryStream.Create;
MemStreamB:=TMemoryStream.Create;
RichEdit1.Lines.SaveToStream(MemStreamA);
for i := 0 to MemStreamA.Size-1 do
begin
MemStreamA.Position:=0;
MemStreamB.Position:=0;
MemStreamA.Read(AChar,1);
AChar:=chr(ord(AChar) xor $61);
MemStreamb.Write(AChar,1);
end;
MemStreamB.Position:=0;
richedit1.Lines.LoadFromStream(memstreamb);
MemStreamA.Free;
MemStreamB.Free;
顺便说一句,加密后保存到表中数据均为:’=p=‘,而单击浏览按纽,也就是从数据库中取出,解密后仍为’=p=‘请在帮我看看(也许表达有些混乱,竟请原谅)
procedure TForm1.TreeView1Click(Sender: TObject);
var
year,month,day:word;
str1,str2,str3:string;
i, Size:integer;
AChar:char;
TempStr: String;
MemStreamA:TMemoryStream;
MemStreamB:TMemoryStream;
begin
MemStreamA:=TMemoryStream.Create;
MemStreamB:=TMemoryStream.Create;
try
RichEdit1.Lines.SaveToStream(MemStreamA);
Size := MemStreamA.Size;
MemStreamA.Position := 0;
MemStreamB.Position := 0;
for i := 0 to Size-1 do
begin
MemStreamA.Read(AChar,1);
AChar:=chr(ord(AChar) xor $61);//异或加密,数字可自定,在$00-$FF之间,同解密数字 MemStreamb.Write(AChar,1);
end;
MemStreamB.Position:=0;
SetLength(TempStr, Size);
MemStreamB.Read(TempStr[1], Size);
finally
MemStreamA.Free;
MemStreamB.Free;
end;
decodedate(Now,year,month,day);
str1:=inttostr(year);
str2:=inttostr(month);
str3:=inttostr(day);
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('INSERT INTO diray VALUES(:year,:month,:day,:rj)');
adoquery1.Parameters.ParamByName('year').value:=str1;
adoquery1.Parameters.ParamByName('month').value:=str2;
adoquery1.Parameters.ParamByName('day').value:=str3;
adoquery1.Parameters.ParamByName('rj').value:= TempStr;
adoquery1.execsql;
end
procedure TForm1.TreeView1Click(Sender: TObject);
var
str1,str2,str3:string;
mynode,mynode1,mynode2:TTreeNode;
i, Size:integer;
AChar:char;
TempStr: String;
MemStreamA:TMemoryStream;
MemStreamB:TMemoryStream;
stream:TMemorystream;
begin
if treeview1.Selected.count<>0 then begin end else begin
mynode:=treeview1.Selected;
str1:=mynode.Text;
mynode1:=mynode.Parent;
str2:=mynode1.Text;
mynode2:=mynode1.Parent;
str3:=mynode2.Text;
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from diray');
adoquery1.SQL.Add('where year=:str3 and month=:str2 and day=:str1');
adoquery1.Parameters.ParamByName('str3').Value:=str3;
adoquery1.Parameters.ParamByName('str2').Value:=str2;
adoquery1.Parameters.ParamByName('str1').Value:=str1;
adoquery1.Open;
end;
TempStr := adoquery1.FieldByName('rj').AsString;
Size := Length(TempStr);
MemStreamA := TMemoryStream.Create;
MemStreamB := TMemoryStream.Create;
try
MemStreamA.Write(TempStr[1], Size); MemStreamA.Position := 0;
MemStreamB.Position := 0;
for i := 0 to Size-1 do
begin
MemStreamA.Read(AChar,1);
AChar:= chr(ord(AChar) xor $61);//解密
MemStreamB.Write(AChar,1);
end; MemStreamB.Position := 0;
RichEdit1.Lines.LoadFromStream(MemStreamB);
finally
MemStreamA.Free;
MemStreamB.Free;
end
end;