Delphi用ADOQuery将图片存入ACCESS,求一个示例。
3个回答
2011-07-14 · 知道合伙人软件行家
关注
展开全部
1、如何实现在Microsoft Access数据库中的图像存储:
这里是利用TStream的子类TMemoryStream向Microsoft Access数据库中存储图像的。
下面的这段代码是在按了“保存”按钮之后所触发的事件处理程序:
procedure TForm1.Button1Click(Sender: TObject);
Var
MyJPEG : TJPEGImage;
MS: TMemoryStream;
Begin
MyJPEG := TJPEGImage.Create;
Try
With MyJPEG do
Begin
Assign(Image.Picture.Graphic);
MS:=TMemoryStream.create;
SaveToStream(MS);
MS.Position := 0;
Table1.Edit;
TBlobField(Table1.FieldbyName('Image')).LoadFromStream(MS);
Table1.Post;
Messagebox(Getactivewindow(), '图像保存完毕!', '保存', MB_OK);
End;
Finally
MyJPEG.Free;
End;
End;
在这段代码里TStream的子类TMemoryStream利用内存流起到了将BMP格式转化为JPEG格式
的中间桥梁的作用。
2、如何将图像从Microsoft Access数据库中取出并显示出来:
下面的这段代码是在按了“查看图像”按钮之后所触发的事件处理程序:
procedure TForm1.Button1Click(Sender: TObject);
Var
MyJPEG : TJPEGImage;
MS : TMemoryStream;
Begin
Try
MS := TMemoryStream.Create;
TBlobField(Query1.FieldByName('Image')).SaveToStream(MS);
MS.Position := 0;
MyJPEG := TJPEGImage.Create;
MyJPEG.LoadFromStream(MS);
DBImage1.Picture.Bitmap.Assign(MyJPEG);
//或是Sender.Picture.Assign(MyJPEG);
Finally
MS.Free;
MyJPEG.Free;
End;
End;
这段代码的主要作用是:首先将查询结果中的JPEG图像格式数据保存到TMemoryStream中去,
然后设置数据指针在TMemoryStream中的位置为0;接着从TMemoryStream中读入相关数据,
并把它们赋给TDBImage.Picture.Bitmap,这样一来就实现了将数据库中所存储的JPEG格式的
数据转化为BMP格式,并在TDBImage中将图像显示出来。最后将TMemoryStream和TJPEGImage
这两个对象释放掉。特别要注意的是不能在设计阶段设置TDBImage的DataField属性,而只能
通过写代码的形式在运行阶段把利用流式数据所转化过来的新格式的图像数据赋给TDBImage.Picture.Bitmap。
这里是利用TStream的子类TMemoryStream向Microsoft Access数据库中存储图像的。
下面的这段代码是在按了“保存”按钮之后所触发的事件处理程序:
procedure TForm1.Button1Click(Sender: TObject);
Var
MyJPEG : TJPEGImage;
MS: TMemoryStream;
Begin
MyJPEG := TJPEGImage.Create;
Try
With MyJPEG do
Begin
Assign(Image.Picture.Graphic);
MS:=TMemoryStream.create;
SaveToStream(MS);
MS.Position := 0;
Table1.Edit;
TBlobField(Table1.FieldbyName('Image')).LoadFromStream(MS);
Table1.Post;
Messagebox(Getactivewindow(), '图像保存完毕!', '保存', MB_OK);
End;
Finally
MyJPEG.Free;
End;
End;
在这段代码里TStream的子类TMemoryStream利用内存流起到了将BMP格式转化为JPEG格式
的中间桥梁的作用。
2、如何将图像从Microsoft Access数据库中取出并显示出来:
下面的这段代码是在按了“查看图像”按钮之后所触发的事件处理程序:
procedure TForm1.Button1Click(Sender: TObject);
Var
MyJPEG : TJPEGImage;
MS : TMemoryStream;
Begin
Try
MS := TMemoryStream.Create;
TBlobField(Query1.FieldByName('Image')).SaveToStream(MS);
MS.Position := 0;
MyJPEG := TJPEGImage.Create;
MyJPEG.LoadFromStream(MS);
DBImage1.Picture.Bitmap.Assign(MyJPEG);
//或是Sender.Picture.Assign(MyJPEG);
Finally
MS.Free;
MyJPEG.Free;
End;
End;
这段代码的主要作用是:首先将查询结果中的JPEG图像格式数据保存到TMemoryStream中去,
然后设置数据指针在TMemoryStream中的位置为0;接着从TMemoryStream中读入相关数据,
并把它们赋给TDBImage.Picture.Bitmap,这样一来就实现了将数据库中所存储的JPEG格式的
数据转化为BMP格式,并在TDBImage中将图像显示出来。最后将TMemoryStream和TJPEGImage
这两个对象释放掉。特别要注意的是不能在设计阶段设置TDBImage的DataField属性,而只能
通过写代码的形式在运行阶段把利用流式数据所转化过来的新格式的图像数据赋给TDBImage.Picture.Bitmap。
追问
1.感谢您的解答,但不是我要的答案,而且TBlobField(Query1.FieldByName('Image')).SaveToStream(MS)应该报错。
追答
query是查询组件,最好不要用来存储数据,一般都是用 sql 语句来完成操作.
展开全部
问题已解决(未加入异常处理语句)。
procedure TForm1.Button2Click(Sender: TObject);
var ms:TMemoryStream;
begin
if Image1.Picture.Graphic <>nil then begin
ms:=TMemoryStream.Create ;
Image1.Picture.Graphic.SaveToStream(ms);
ADOQuery1.Close;
ADOQuery1.SQL.Clear ;
ADOQuery1.SQL.Add('insert into test(id,photo) values(''atest'',:photo)');
ADOQuery1.Parameters.ParamByName('photo').LoadFromStream(ms,ftBlob);
ADOQuery1.execsql;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var ms:TMemoryStream;
begin
if Image1.Picture.Graphic <>nil then begin
ms:=TMemoryStream.Create ;
Image1.Picture.Graphic.SaveToStream(ms);
ADOQuery1.Close;
ADOQuery1.SQL.Clear ;
ADOQuery1.SQL.Add('insert into test(id,photo) values(''atest'',:photo)');
ADOQuery1.Parameters.ParamByName('photo').LoadFromStream(ms,ftBlob);
ADOQuery1.execsql;
end;
end;
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用流可以做到
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询