Delphi用ADOQuery将图片存入ACCESS,求一个示例。
答案:3 悬赏:50 手机版
解决时间 2021-02-20 14:05
- 提问者网友:树红树绿
- 2021-02-19 16:15
Delphi用ADOQuery将图片存入ACCESS,求一个示例。
最佳答案
- 五星知识达人网友:北方的南先生
- 2021-02-19 16:54
问题已解决(未加入异常处理语句)。
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;
全部回答
- 1楼网友:人類模型
- 2021-02-19 18:28
应该是
fieldbyname('日期').asstring := datetimetostr(date());
sql.add('select * from dipbct where 日期=date()
这两句的原因
access 数据库对日期的查找应该加 # #
而且 datetimetostr(date()的格式与 where 日期=date() 的日期格式不同。
第一句换成 fieldbyname('日期').asstring := formatdatetime(‘yyyy-mm-dd’,date())好一些,
比较也采用 where 日期=#'+ formatdatetime(‘yyyy-mm-dd’,date()) +'#'
- 2楼网友:渊鱼
- 2021-02-19 17:45
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。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯