图片保存到数据库的问题,紧急求救!!!

windofsun 2001-12-06 12:30:15
程序中需要把用户所选择的图片保存到数据库。我是这样做的:

// 保存到数据库
Image1.Picture.Bitmap.SaveToStream(MemoryStream);
……
BlobField.LoadFromStream(MemoryStream);

// 从数据库中调出
BlobField.SaveToStream(MemoryStream);
……
Image1.Picture.Bitmap.LoadFromStream(MemoryStream);

但是这种方法只能保存位图文件,而不能保存jpg、gif等格式的图片,而用户可能会选择任何一种图片。另外,用这种方法保存,当图片太大时,也会出错。

各位大侠,帮帮我!马上要提交了!
...全文
127 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
taxi 2001-12-06
  • 打赏
  • 举报
回复
uses Jpeg;

//保存
procedure XXXXX.xxxxx
begin
if OpenPictureDialog1.Execute then
with TAble1 do
begin
Append;
FieldByName("xxxxx').AsString := 'xxxxxx';
TBlobField(FieldByName('picture')).LoadFromFile(OpenPictureDialog1.FileName);
Post;
end;
end;

//读取
procedure XXXXXX.XXXX;
var
MS: TMemoryStream;
JpegImage: TJpegImage;
begin
MS := TMemoryStream.Create;
TBlobfield(Table1.FieldByName('picture')).SaveToStream(MS);
MS.Position := 0;
if 是JPEG格式图片 then
begin
JpegImage := TJpegImage.Create;
JpegImage.LoadFromStream(MS);
Image1.Picture.Graphic := JpegImage;
end
else if 是位图 then
Image1.Picture.Bitmap.LoadFromStream(MS)
els eif 是图标 then
Image1.Picture.Icon.LoadFromStream(MS);
end;
zhaofansym 2001-12-06
  • 打赏
  • 举报
回复
不要用流操作,用文件操作
thedream 2001-12-06
  • 打赏
  • 举报
回复
先转换格式嘛,或者就直接保存图片路径嘛,省事~~
cobi 2001-12-06
  • 打赏
  • 举报
回复
吧图片保存到数据库的例子:

//保存
procedure TForm1.ImageIntoDBBitBtnClick(Sender: TObject);
begin
try
with Query1 do
begin
close;
sql.clear;
sql.add('insert into img (imga) values(:imag)');
end;
try
if FileName<>'' then
ParamByName('Img').LoadfromFile(FileName,ftGraphic)
else
ParamByName('Img') .asBlob:='';
Query1.ExecSQL;
except
ShowMessage('图片保存出错!');
exit;
end;
except
end;
end;

//读取
procedure TForm1.ImageFromDBBitBtnClick(Sender: TObject);
var
m_jpegstream:tmemorystream;
begin
with Query1 do
begin
close;
sql.clear;
sql.Add('select imga from img');
try
Open;
except
exit;
end;
end;
if (Query1.FieldByName('imga') as tblobfield).asstring='' then
begin
exit;
end
else
begin
try
try
m_jpegStream:=TMemoryStream.Create;
(Query1.fieldbyname('imga') as TBlobField).SaveToStream(m_JpegStream);
m_JpegStream.Position:=0;
try
image2.Picture.Graphic:=nil;
image2.Picture.Graphic:=TJpegImage.Create;
image2.Picture.Graphic.LoadFromStream(m_JpegStream); //读Jpeg
except
Image2.Picture.Bitmap.LoadFromStream(m_JpegStream); //读Bmp
end;
except
end;
finally
m_JpegStream.Free;
Query1.Close;
Query1.UnPrepare;
end;
end;
end;

//BMP转换为JPG
procedure TStuXXSLForm.LoadImageBitBtnClick(Sender: TObject);
var
MyJpeg:TJpegImage;
begin
inherited;
if OpenPictureDialog1.Execute then
begin
FileName:=OpenPictureDialog1.FileName;
Image1.Picture.LoadFromFile(FileName);
if ExtractFileExt(FileName)='.Bmp' then
begin
MyJpeg:= TJpegImage.Create;
MyJpeg.Assign(Image1.Picture.Bitmap);
FileName:='Photo.Jpg';
MyJpeg.SaveToFile(FileName);
MyJpeg.Free;
end;
end;
end;
  • 打赏
  • 举报
回复
//保存图象到数据库
imgPhoto.Picture.LoadFromFile(OpenPhoto.FileName);
tbStdMes.Edit;
TBlobField(tbStdMesPhoto).LoadFromFile(OpenPhoto.FileName);
tbStdMes.Post ;

//从数据库中读出图象
if not qyStdMesphoto.isNull then
begin
StrXh:=trim(qyStdMesXh.AsString );
PhotoFileName:=ExtractFilePath(Application.ExeName)+qyStdMesXh.AsString+'.jpg'
tbStdMes.Active:=True;
tbStdMes.FindKey([trim(StrXh)]);
blImagPhoto:=TBlobStream.Create(TBlobField(tbStdMesphoto),bmRead);
try
jpgPhoto:=TJpegImage.Create ;
try
jpgPhoto.LoadFromStream (blImagPhoto);
jpgPhoto.SaveToFile(PhotoFileName);
tbStdMes.Active:=False;
finally
jpgPhoto.Free ;
end;
finally
blImagPhoto.Free ;
end;
end;
这是我从我以前的系统中找出的一段代码,我想您应该没有问题。

try
TChildForm(ActiveWindows).imgPhoto.Picture.LoadFromFile(PhotoFileName);
TchildForm(ActiveWindows).imgPhoto.Visible :=True;
except
ShowMessage('请退出程序,重新启动程序');
end;
end;
michaelpeng7799 2001-12-06
  • 打赏
  • 举报
回复
ADO里有一个getchunk什么的可以用来做这个,具体忘了,你看看DELPHI的ADO的HELP吧。

ping2000 2001-12-06
  • 打赏
  • 举报
回复
关注
taxi 2001-12-06
  • 打赏
  • 举报
回复
增加一个字段保存扩展名,或者按小新的方法做。
webo 2001-12-06
  • 打赏
  • 举报
回复
这个问题没法解决,是个bug,你要直接问delphi公司!
你可以搜索一下image,会发现的!!!!!
windofsun 2001-12-06
  • 打赏
  • 举报
回复
taxi(游少爷),读取的时候怎么判断数据库中保存的是什么格式的图片呢?
belllab 2001-12-06
  • 打赏
  • 举报
回复
ParamByName('Img').LoadfromFile(FileName,ftGraphic)

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧