图片保存到数据库问题(50分)

  • 主题发起人 主题发起人 freeloader
  • 开始时间 开始时间
F

freeloader

Unregistered / Unconfirmed
GUEST, unregistred user!
我用Tbitmap.SaveToStream的方法把.bmp图片保存到access数据库中,每次把图片从数据库中读取时,图片的上半部总是不显示全(黑色的),请兄弟姐妹告知小弟!
 
是不是你的那个字段的字节太小了
 
TO liuguilg:不是,类型是ole,大小图片都不行
 
流在保存之前有没有定位为0?
 
在保存之前应先将流的当前位置置零
不然是从Position位置开发存的
 
mstream.Position := 0;
保存的时候没有定位,读取的时候定位了,但是保存时我用的是 mstream.DataString;
???
 
大哥们帮看一下:
存:
var
infoid : string;
aa:tbitmap;
mstream: tstringstream;
begin
aa:=tbitmap.Create;
aa.LoadFromFile('c:/aaa.bmp');
mstream := Tstringstream.create('');
aa.SaveToStream(mStream);
image1.Picture.Assign(aa);
infoid :=formatdatetime('yymmddHHmmss', now());
try
query2.Close;
query2.SQL.Text :=
'insert into treslog(resid,photoimg)'
+ ' values(''' + infoid + ''',:image)';
mstream.Position:=0;
query2.Params[0].AsBlob := mstream.DataString;
query2.ExecSQL;
取:
var
mStream : tstream;
bb:tbitmap;
begin
Imagel.Picture.Assign(nil);
bb:=tbitmap.Create;
mStream := Query3.CreateBlobStream(Query3.FieldByName('photoimg'), bmRead);
try
mstream.Position := 0;
if mstream.Size > 0 then
begin
bb.LoadFromStream(mstream);
bb.SaveToFile('c:/b.bmp');
Imagel.Picture.LoadFromFile('c:/b.bmp');
end
else
begin
Imagel.Picture.Assign(nil);
end;
finally
bb.Free;
mstream.Free;
end;
 
why nobody????
 
给你两个函数吧
procedure TFrmUplaodPic.SaveImage(ADS: TADODataSet;PicFieldName:string);
{功能:把图像保存进数据库中
入口:TADODataSet数据源(LockType := ltBatchOptimistic)、数据源图像字段名称
时间:20020625
编者:Tony Liu }
var
MyJPEG: TJPEGImage;
MS: TMemoryStream;
Image: TImage;
begin
Image := TImage.Create(nil);
image.Picture.LoadFromFile('d:/123.jpg');
MyJPEG := TJPEGImage.Create;
try
with MyJPEG do
begin
Assign(Image.Picture.Graphic);
MS := TMemoryStream.create;
SaveToStream(MS);
MS.Position := 0;
ADS.Edit;
//PicFieldName是数据表中的image型字段名称
TBlobField(ADS.FieldbyName(PicFieldName)).LoadFromStream(MS);
image.Picture.CleanupInstance;
end;
finally
MyJPEG.Free;
Image.Free;
Image := nil;
end;
end;


function ShowDBimage(Image: TImage; ADSImage: TADODataSet;
imageFieldName: string): boolean;
{功能:把数据源中的图像字段显示在TImage控件中
入口:显示图像的TImage控件,TADODataSet数据源、数据源图像字段名称
时间:20020625
编者:Tony Liu }
var
tempstream: TStringStream;
tempjpeg: TJPEGImage;
begin
try
if ADSImage.FieldByName(imageFieldName).IsNull then exit;
tempstream := TStringStream.Create(' ');
TBlobField(ADSImage.FieldByName(imageFieldName)).SaveToStream(tempstream);
tempstream.Position := 0;
tempjpeg := TJPEGImage.Create;
tempjpeg.LoadFromStream(tempstream);
Image.Picture.Bitmap.Assign(tempjpeg);
finally
tempstream.Free;
tempjpeg.Free;
end;
end;
 
帮顶!

╭=========================================╮

80G海量源代码,控件,书籍全免费狂下不停!

http://www.source520.com

╰=========================================╯
 
把BDE的BLOB SIZE改大点试试
 
自己正好了
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
758
SUNSTONE的Delphi笔记
S
后退
顶部