有以下是我写的常用函数
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;