续:BLOB字段的读取(100分)

  • 主题发起人 主题发起人 W1979
  • 开始时间 开始时间
W

W1979

Unregistered / Unconfirmed
GUEST, unregistred user!
这个问题和<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=260321">这里 </a> 是一样的,那个页面太长了,刷新了
几次都看不全.这样这个问题就是150分。
以前automn问过这个问题的
我是想把DBDEMOS里的biolife表的Graphic字段显示到Timage中
我曾参看了已前的回答,试了但不行

procedure TForm1.Button4Click(Sender: TObject);
var memory:Tmemorystream;
jpeg:TJpegimage;
begin
try
memory:=Tmemorystream.Create;
jpeg:=Tjpegimage.create;
tblobfield(table1.FieldByName('Graphic')).savetostream(memory);
memory.Position:=0;
jpeg.LoadFromStream(memory);
image1.Picture.Bitmap.Assign(jpeg);//试过用metafile代替Bitmap
finally
jpeg.free;
memory.Free;
end;
end;

报错说jpeg error #52, delphi的邦助中没有EJpeg这个异常, 另外我不懂,为什么非
要用TJpegImage?


 
惭愧,竟然每对……
洗耳恭听;
 
跟踪显示,错误出在jpeg.loadfromstream(memory);一句,另外,有警告说那个jpegimage
和memoryStream可能没有初始化是什么意思?
 
DBDEMOS里的biolife表的Graphic字段不是格式,不必要用jpegimage

procedure TForm1.Button4Click(Sender: TObject);
begin
image1.Picture.Assign(table1.FieldByName('Graphic'));
end;


 
DBDEMOS里的biolife表的Graphic字段不是Jpeg格式,而为BMP格式。
用jpegimage.loadfromstream 相当于用loadfromfile,因为stream记录的数据
格式跟文件格式是一样的,所以
memory:Tmemorystream里记录的数据是以bmp格式。所以你的方法相当于用jpegFImage打开一个*.bmp文件,当然会出错。
 
//table1连了哪个有图片的表
//Fields[4]是图片blob字段。
procedure TForm1.Button1Click(Sender: TObject);
var
bmp:TBitmap;
begin
table1.Open;
table1.First;
try
bmp := Tbitmap.Create;
bmp.Assign(table1.Fields[4]);
Image1.Picture.Bitmap:=bmp;
finally
bmp.Free;
end;
end;
 
多人接受答案了。
 
后退
顶部