Delphi用ADOQuery将图片存入ACCESS,求一个示例。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi用ADOQuery将图片存入ACCESS,求一个示例。相关的知识,希望对你有一定的参考价值。

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。追问

1.感谢您的解答,但不是我要的答案,而且TBlobField(Query1.FieldByName(\'Image\')).SaveToStream(MS)应该报错。

追答

query是查询组件,最好不要用来存储数据,一般都是用 sql 语句来完成操作.

参考技术A 问题已解决(未加入异常处理语句)。
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;本回答被提问者采纳
参考技术B 用流可以做到

delphi如何将明细表中的数据保存到数据库中

delphi如何将明细表中的数据保存到数据库中

1. 连接到数据库,例如用
ADOConnection设置连接数据库,
新建一个ADOQuery

2.新建表格, 例如 table2a:
ADOQuery.sql.text := \'CREATE TABLE table2a
(
name varchar(20),
age INT
)\';
ADOQuery.open;
ADOQuery.close;

3. 加入数据表
ADOQuery.sql.text := \'BULK INSERT table2a FROM \'c:\\table2a_file.txt\'
WITH
(
FIELDTERMINATOR = \',\',
ROWTERMINATOR = \'\\n\'
)\';
ADOQuery.open;
参考技术A 分2步
1.连接数据库
2.更新数据库

就这样来问问题,具体代码神仙也写不出来。
参考技术B 信息,从表中保存订单中的物品明细,可以用主表中的订单号作为从表中的外键。这样两个表即可关联起来了。 参考技术C dataset1.post

以上是关于Delphi用ADOQuery将图片存入ACCESS,求一个示例。的主要内容,如果未能解决你的问题,请参考以下文章

delphi如何将明细表中的数据保存到数据库中

delphi中adoquery的使用(delphi高手详细说一下)

delphi ADOQuery 开启本地缓存

“delphi”怎样判断“adoquery”查询后的结果是不是为空?

delphi adoquery的post和UpdateBatch

怎样用sql语句取表里第n条记录的数据啊(用Delphi实现)