dephi中显示图片

我們知道BLOB在数据库的表中实际上是以二进制数据的形式存放的。由于BLOB的特殊性,一般的程序都无法处理它。比如,如果在一张表中存在BLOB,当用數據顯示控件打开它时,BLOB列将只显示BLOB字样。至于该列中实际存的是什么数据是一般的數據顯示控件无法知到的。如果在我们编制的程序中,用DBGrid控件打开一个有BLOB字段的表,效果也一样。我们的程序无法直接显示、编辑以及插入BLOB字段。可见,常规的方法是不能满足要求的。
        既然我們知道數據以二進制形式存放,那麼就可以通过内存流来完成。使用内存流,可减少磁盘操作,從而大大提高运行效率。程序的實現代碼如下(以Delphi為例進行說明):


procedure TForm3.btn1Click(Sender: TObject);  //插入圖片過程
var
  tStream:TMemoryStream;
begin
  try
    tStream := TMemoryStream.Create;                                 //創建內存流
    img1.Picture.Graphic.SaveToStream(tStream);  //將圖片保存至內存流中
    qry1.Close;
    qry1.SQL.Clear;
    qry1.SQL.Add('Insert into photo (id,photo) values (:id,:photo)'); //進行插入操作
    qry1.Parameters.ParamByName('id').Value := '003';
    qry1.Parameters.ParamByName('photo').LoadFromStream(tStream,ftBlob);  //讀取保存的內存圖
    qry1.ExecSQL;
  finally
    tStream.Free;                                                                     //釋放內存流
  end;
  end;

procedure TForm3.btn2Click(Sender: TObject);     //讀取圖片過程
var
  tStream:TMemoryStream;
  Jpg:TjpegImage;
begin
qry1.Close;
qry1.SQL.Text:='select (photo) from photo';
qry1.Open;
  if not qry1.FieldByName('photo').IsNull then
  begin
    tStream:=TMemoryStream.Create ;
    Jpg:=TjpegImage.Create ;
    TBlobField(qry1.FieldByName('photo')).SaveToStream(tStream);  //顯示的轉換為BlobFiled並保存至內存流
    tStream.Position :=0;
    jpg.LoadFromStream(tStream);
    img2.Picture.Assign(Jpg);
end
else
begin
   img2.Picture :=nil;
end;
end;

转载于:https://www.cnblogs.com/hanhan/archive/2012/03/31/2427286.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值