关于将JPG图形文件存入SQL数据库的问题 ( 积分: 200 )

  • 主题发起人 主题发起人 xinshou89855219
  • 开始时间 开始时间
X

xinshou89855219

Unregistered / Unconfirmed
GUEST, unregistred user!
各位高手,小第请教两个问题,
1,怎样把一个JPG文件传到SQL数据库中,我只能把BMP等少数类型的文件存到数据库中去,而JPG老不行,不知怎样解决.
代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
Picture1:Tpicture;

begin
Picture1:=Tpicture.Create;
if OpenPictureDialog1.Execute then
begin
adotable1.Active:=true;
Adotable1.Append;
Picture1.LoadFromFile(OpenPictureDialog1.FileName);
Adotable1.FieldByName('001').Assign(Picture1); //'001'字段是image类型
end;
end;
2,如果上面能把JPG文件写入数据库中,怎样把一个把数据库中的图形字段的内容读出来,并附给一个image1的控件,并让image1把图片显示出来,怎样解决.
 
保存
if not SmallImage.Empty then
begin
SmallImage.SaveToStream(tmpStream);
tmpStream.Position := 0;
TBlobField(Parameters.ParamByName('pSmallImage')).LoadFromStream(tmpStream);
end;
读出
tmpStream.Size := 0;
TBlobField(FieldByName('SmallImage')).SaveToStream(tmpStream);
tmpStream.Position := 0;
SmallImage := TBitmap.Create;
SmallImage.LoadFromStream(tmpStream);
 
建议数据表增加FileExt字段varchar(10),以保存图片文件的扩展名,方便下次读取时知道图片的格式, 下面的两个过程支持BMP,JPG,GIF三种图片格式,
uses
Jpeg, RxGif;

{
FileName:文件全名;
ImageField:存储图片的Blob字段;
FieldExtField:保存扩展名的字段.
}
procedure SaveImage(FileName:string;ImageField,FileExtField:TField);
var
FileExt:string;
Graphic:TGraphic;
NeedPost:Boolean;
begin
FileExt:=UpperCase(ExtractFileExt(FileName));
Graphic:=nil;
try
if FileExt='.BMP' then
Graphic:=TBitmap.Create
else if (FileExt='.JPG') or (FileExt='.JPEG') then
Graphic:=TJpegImage.Create
else if FileExt='.GIF' then
Graphic:=TGifImage.Create
else
raise Exception.Create('Unknown image format!');
if not (ImageField.DataSet.State in [dsEdit,dsInsert]) then
begin
NeedPost:=True;
ImageField.DataSet.Edit;
end else
NeedPost:=False;
Graphic.LoadFromFile(FileName);
ImageField.Assign(Graphic);
FileExtField.Value:=FileExt;
if NeedPost then
ImageField.DataSet.Post;
finally
if Graphic<>nil then
Graphic.Free;
end;
end;

{
ImageField:存储图片的Blob字段;
FieldExtField:保存扩展名的字段;
Image:用于读取后显示的TImage控件.
}
procedure LoadImage(ImageField,FileExtField:TField;Image:TImage);
var
FileExt:string;
Graphic:TGraphic;
begin
FileExt:=FileExtField.AsString;
Graphic:=nil;
try
if (FileExt='.JPEG') or (FileExt='.JPG') then
Graphic:=TJPEGImage.Create
else if FileExt='.BMP' then
Graphic:=TBitmap.Create
else if FileExt='.GIF' then
Graphic:=TGifImage.Create
else
Graphic:=nil;
if Graphic<>nil then
begin
Graphic.Assign(ImageField);
Image.Picture.Assign(Graphic);
end;
finally
if Graphic<>nil then
Graphic.Free;
end;
end;
 
数据的前2字节保存有图片类型。不需要另外保存扩展名
 
多人接受答案了。
 

Similar threads

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