delphi 上传和下载用户头像(ACCESS数据库)

1.数据表设计:

要点:

  • [用户头像]字段选择 OLE对象
  • [用户头像]不要直接在数据库中插入对象,因为会被套壳(如下图所示),程序要想再读出来很困难
  • 理论上应该由程序上传到数据库,而不是直接在数据库里添加

image

直接插入会被加壳

imageimage 

 

下面这种才对正确的数据格式

image

 

 

程序界面设计:

  • 给用户设置一个默认的头像(如下图的螃蟹)
  • 设置一个方法,用来把用户头像从数据库中取回,然后显示到图片控件中
  • 设置一个方法,用来把用户的信息更新到数据库,包括头像. 

image

 

实现下载并替换用户头像功能:

procedure TEditChangePW.SetUserImg;
begin
  var png:=TPngImage.Create;
  var blobField := FDQuery1.FieldByName('用户头像') as TBlobField;

  // 检查是否有头像数据
  if blobField.IsNull or (blobField.BlobSize = 0) then
    Exit;

  // 创建内存流
  var stream := TMemoryStream.Create;
  try
    // 将数据库中的图片数据保存到流
    blobField.SaveToStream(stream);
    stream.Position := 0;
  
    png.LoadFromStream(stream);//将内存流转成PNG图片
    scGPImage1.PngImage:=png;  //替换用户头像
  finally
    stream.Free;
    png.free;
  end;
end;

 

 实现更新数据,上传图片等功能

FDQuery1.edit;
  //FDQuery1.FieldByName('密码').Value := Trim(newpw.Text);
   //打包图片
  var stream := TMemoryStream.Create;
  var png := scGPImage1.PngImage;
  var blobField := FDQuery1.FieldByName('用户头像') as TBlobField;   //强制转换
  try
    png.SaveToStream(stream);  //将图片保存为内存流
    stream.Position := 0;
    blobField.LoadFromStream(stream);

    FDQuery1.post;
    UWPInfoMessage('提示', '信息已保存!');
    ModalResult := mrOk;
  finally
    stream.free;
  end;

圆形头像可以参考这个链接

 delphi 做一个圆形头像 - 一曲轻扬 - 博客园 (cnblogs.com)

posted @ 2026-03-21 16:34  一曲轻扬  阅读(3)  评论(0)    收藏  举报