当前位置:编程学习 > Delphi >>

delphi 上传图片的问题

我碰到这样的情况。做单个上传图片可以成功,做单个显示图片也可以成功,但是同时做上传在显示图片就出现下面图片的错误。我是根据跟踪调试,我不知道什么原因请各位大哥帮忙看看

 

 

//添加图片

procedure TForm1.Button3Click(Sender: TObject);
var
  F:File of Byte;
  size:Longint;//文件大小
  FilePath,time:string;//文件时间
begin
  if not OpenDialog1.Execute then Exit;   //从本机上获取图片
  FilePath := OpenDialog1.FileName;
  AssignFile(F,FilePath);
  reset(F);
  size := Filesize(F);//获取文件大小
  time := DatetimetoStr(FileDateToDateTime(FileAge(FilePath)));//获取文件创建时间
  closefile(F);
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('select * from T_B_Picture');
  ADOQuery1.Open;
  ADOQuery1.Insert;
  ADOQuery1.FieldByName('FileName').AsString := ExtractFileName(FilePath);//储存文件名
  ADOQuery1.FieldByName('FileKind').AsString := ExtractFileExt(FilePath);//储存文件扩展名
  ADOQuery1.FieldByName('FileSize').AsInteger := size;//储存文件的大小
  ADOQuery1.FieldByName('FileTime').AsString := time;//储存文件的创建时间
  ADOQuery1.FieldByName('SaveTime').AsDateTime := now();//存取文件的储存时间
  TBlobField(ADOQuery1.FieldByName('FileContent')).LoadFromFile(FilePath); 
  ADOQuery1.Post;

  //////////////////显示刚上传的图片///////////////
  ShowPhoto(FilePath)
end;

//显示图片
function TForm1.ShowPhoto(sFile: string):TImage;
var
  Ms:TStream;
  jpg:Tjpegimage;
begin
   Adoquery1.Close;
   ADOQuery1.SQL.Clear;
   ADOQuery1.SQL.Add('select * from T_B_Picture where FileName = '''+ sFile + '''');
   ADOQuery1.Open;
   Ms:=TStream.Create;
   MS:=ADOQuery1.CreateBlobStream(ADOQuery1.FieldbyName('FileContent'),bmRead);
   Ms.Position :=0;
   jpg:=Tjpegimage.Create;
   Jpg.LoadFromStream(Ms);
   Image1.Picture.Assign(Jpg); 
   jpg.Free;
   MS.Free;
end;

追问:你说错了,我是按数据库以二进制流存进数据库。在查找出来,不是按你说的带路径的文件名查询的
答案:

你前面存储的文件名:ExtractFileName(FilePath);//储存文件名

是只存了文件名,而你后面查找的时候是带路径的文件名,所以没找到。也就是说后面的图片流为空.

上一个:初次安装delphi的问题。
下一个:DELPHI如何制作托盘程序

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,