图片存入数据库的问题! ( 积分: 50 )

  • 主题发起人 主题发起人 black_yin
  • 开始时间 开始时间
B

black_yin

Unregistered / Unconfirmed
GUEST, unregistred user!
我用的数据库是SQLServer2000,想实现的是把图片存入数据库以及可以调用出来。
具体应该怎么做呢?用什么控件来显示从数据库中取出来的图片呢?数据库中存的类型又是什么呢?
各位看看能不能给个例子啊?
 
我用的数据库是SQLServer2000,想实现的是把图片存入数据库以及可以调用出来。
具体应该怎么做呢?用什么控件来显示从数据库中取出来的图片呢?数据库中存的类型又是什么呢?
各位看看能不能给个例子啊?
 
你在论坛搜一搜,这方面的资料有很多
 
用DBImage或數據流都可以保存到數據庫裡。
 
TBlobField(ADOQuery1.FieldByName('Picture')).Assign(image1.Picture.Graphic);
 
或者一般都是用TBlobField(ADOQuery1.FieldByName('Picture')).LoadFromSream;
 
SQL Server中用image类型~

看看这个代码:http://delphibbs.com/delphibbs/dispq.asp?lid=3300951
 
同意sbzldlb的方法,我也是这样做的,速度也不错.
 
ms:=TMemoryStream.Create;
image1.Picture.LoadFromFile(opendialog1.FileName);
mybmp:=TBitmap.Create;
mybmp.Assign(image1.Picture.Graphic);
mybmp.SaveToStream(ms);
ms.Position:=0;

RS.Edit;
TBlobField(RS.FieldByName('封面')).Clear;
TBlobField(RS.FieldByName('封面')).LoadFromStream(ms);
RS.Post;
 
以下是显示部分
ss:=TStringStream.Create('');
TBlobField(RS.FieldByName('封面')).SaveToStream(ss);
ss.Position:=0;
pic:=TJPEGImage.Create;
pic.LoadFromStream(ss);
image1.Picture.Bitmap.Assign(pic);
 
有以下是我写的常用函数

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;
调用函数后需要把TADODataSet进行UpdateBatch才能真正保存数据


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;
 
保存到数据库
Image : TImage;
Image.picture.loadFromfile('filename');
AdoqSave.Append ;
AdoqSave.FieldByName('图象').Assign(ImgVehiPic.Picture.Graphic) ;
AdoqSave.Post ;
从数据库取出
Mem : TStream ;
JPG : TJPEGImage ;
Mem.Position := 0 ;
JPG.LoadFromStream(Mem);
Image.Picture.assign(Jpg);
 
[:)]呵呵,少写了一句
从数据库取出
Mem : TStream ;
JPG : TJPEGImage ;
Mem := AdoqVehiPic.CreateBlobStream(AdoqVehiPic.FieldByName('图象'),bmread) [red];(少写了)[/red]
Mem.Position := 0 ;
JPG.LoadFromStream(Mem);
Image.Picture.assign(Jpg);
 
后退
顶部