我用dbimage将我放到数据库中的jpg/bmp图象显示出来,却不行,报错
另外我自己写了个测试程序,也不行,用debug总是在某个位子出错!!
各位大虾绑到看看
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, ExtCtrls, DBCtrls, Grids, DBGrids,jpeg;type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
Image1: TImage;
procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
var
m_jpegstream:TMemorystream;
begin
if (ADOQuery1.FieldByName('photo') as Tblobfield).asstring='' then
begin
exit;
end
else
begin
try
try
m_jpegStream:=TMemoryStream.Create;
// m_jpegStream:= ADOQuery1.CreateBlobStream (ADOQuery1.FieldByName('photo'),bmReadWrite);
(ADOQuery1.fieldbyname('photo') as TBlobField).SaveToStream(m_JpegStream);
m_JpegStream.Position:=0;
try
image1.Picture.Graphic:=nil;
image1.Picture.Graphic:=TJpegImage.Create;
image1.Picture.Graphic.LoadFromStream(m_JpegStream); //读Jpeg---出错
except
// image1.Picture.Bitmap:=nil;
// image1.Picture.Bitmap:=TImage.Create;
image1.Picture.Bitmap.LoadFromStream(m_JpegStream); //读Bmp
end;
except
end;
finally
m_JpegStream.Free;
end;
end;end;end.
解决方案 »
- Delphi2010 的设置问题
- 在scrollbox 里面放一个paintbox,然后在paint 事件里面输出文字,但是当scrollbox滚动往下滚动时,字体大小发生变化。为什么?
- 请教高手 delphi调用C++ dll问题
- 怎样在showmessage()中显示整形值?
- 想做个DLL来访问数据库,可却出错了,请帮个忙看看。
- 怎么安全的close一个进程呢?
- 这样为何取不出来!
- 我这样生命集合错了吗?
- 请大家给我仔细讲讲variant * ???100分送上
- 我用adoquery1.fieldbyname('name').Value 来获取name字段的值怎么不行啊
- pfxml参数出现问题?
- 小问题!散分
http://www.csdn.net/expert/topic/973/973247.xml?temp=.441189
try
try
m_jpegStream:=TMemoryStream.Create;
(adoQuery1.fieldbyname(str) as TBlobField).SaveToStream(m_JpegStream);
m_JpegStream.Position:=0;
try
image4.Picture.Graphic:=nil;
image4.Picture.Graphic:=TJpegImage.Create;
image4.Picture.Graphic.LoadFromStream(m_JpegStream); //读Jpeg
except
Image4.Picture.Bitmap.LoadFromStream(m_JpegStream); //读Bmp
end;
except
end;
finally
m_JpegStream.Free;
adoQuery1.Close;
end;
end;
JPEG:TJPEGIMAGE;
stream: TMemoryStream;
begin
image1.Picture.Assign(nil);
if dm.DS_YGPHOTO.FieldByName('photo').IsNull then
begin
image1.Tag :=0;
panel2.Caption :='无照片';
end
else
begin
JPEG:=TJpegimage.Create ;
stream:=TMemoryStream.Create ;
tblobfield(dm.DS_YGPHOTO.FieldByName('photo')).savetostream(stream);
Stream.Seek(0, soFromBeginning);
jpeg.loadfromstream(stream);
image1.Picture.Bitmap.Assign(jpeg);
freeandnil(Jpeg);
freeandnil(stream);
image1.Tag :=1;
end;
end;
我的代码不行吗?
用adodataset,
sql :select * from ygphoto where ygbh='333';
在一个时候只能显示一种吧,或者你做个标记是BMP,或JPEG,
要引入JPEG单元的
image1.Picture.Graphic.LoadFromStream(m_JpegStream);