access怎么存储图片?谢谢。(50分)

  • 主题发起人 主题发起人 lsm_jx
  • 开始时间 开始时间
怎么没有人回答这个问题是太容易了吗?
 
用BLOB字段
 
可数据类型中没有这个?我还是不会
 
bmp:
保存:
var
CurStream:TFileStream;
begin
Table1.append;
if FileName<>'' then
begin
CurStream:=TFileStream.Create(FileName,fmOpenRead);
TBlobField(Table1.FieldByName('ole object Field')).LoadFromStream(CurStream);
CurStream.free;
end;
Table1.post;
取出:
TBlobField(Table1.FieldByName('ole object Field')).SavetoFile('c:/temp.bmp');
shellExecute(handle,'open','c:/temp.bmp', '', '', SW_SHOWNORMAL);
jpg:
保存JPG文件到access库的ole字段中的。
procedure Tfrmado.ImageDblClick(Sender: TObject);
begin
with topendialog.Create(Self)do
begin
if execute then
begin
if not (adoquery1.State in [dsedit]) then
adoquery1.Edit ;
tblobfield(adoquery1.FieldByName('jpg')).LoadFromFile(FileName) ;
end;
end;
end;

procedure Tfrmado.DataSource1DataChange(Sender: TObject;
Field: TField);
var
jpeg:tjpegimage;
stream :TMemoryStream;
begin
if adoquery1jpg.BlobSize>0 then
begin
jpeg:=tjpegimage.Create;
stream :=TMemoryStream.Create;
tblobfield(adoquery1.FieldByName('jpg')).savetostream(stream);
Stream.Seek(0,soFrombegin
ning);
jpeg.loadfromstream(stream);
image.Picture.Bitmap.Assign(jpeg);
jpeg.Free;
stream.Free;
end
else
image.Picture:=nil;
end;
 
还可以给点提示吗,这个问题是菜了点,但确实不会。谢谢!
 
难道非要用程序才能保存图片到access吗?
 
建库时将要保存图案的字段定义为 OLD对象
在程序中可以用cg1120的方法保存图片,
如果你不想用程序控制,你留个Mail,我发个程序给你,用它就可以存了
 
我的email是lsm_1979@hotmail.com
谢谢,我不知道Access是否可以向存储文字一样存储图片呢?谢谢!
 
发给你了,
存储二进制文件不能象其它字段那样操作,只能通过流方式(文件流或内存流)
或者简单点:
TBlobField(Table1.FieldByName('ole object Field')).LoadFromFile(文件名);//导入
TBlobField(Table1.FieldByName('ole object Field')).SaveToFile(文件名);//导出
 
procedure TForm1.DataSource1DataChange(Sender: TObject;
Field: TField);
var
Ext:string;
SS:TStringStream;
Jpeg:TJpegImage;

k:double;
begin
if (Field=nil) or (Field=QueryLaoXiangPhoto) then
begin
Ext:=QueryLaoXiangPhotoType.AsString;
//图像为JPEG时,把JPEG转换为bitmap格式
if (Ext='.JPG') or (Ext='.JPEG') then
begin

SS:=TStringStream.Create('');
Jpeg:=TJpegImage.Create;
try
if QueryLaoXiangPhoto<>nil then
begin
TBlobField(QueryLaoxiangPhoto).SaveToStream(SS);
SS.Position:=0;
//Jpeg:=TJpegImage.Create;
Jpeg.LoadFromStream(SS);
//改变ImgPhoto控件的大小,让图片失真缩小
ImgPhoto.Width:=190;
ImgPhoto.Height:=160;
k:=Jpeg.Width/Jpeg.Height;
if k>1 then
ImgPhoto.Height:=trunc(ImgPhoto.Width/k)
else
ImgPhoto.Width:=trunc(ImgPhoto.Height*k);
ImgPhoto.Height:=ImgPhoto.Height-5;
ImgPhoto.Width:=ImgPhoto.Width-5;
ImgPhoto.Left:=trunc((190-ImgPhoto.Width)/2);
ImgPhoto.Top:=trunc((160-ImgPhoto.Height)/2);
ImgPhoto.Picture.Bitmap.Assign(Jpeg);
end;
finally
SS.Free;
Jpeg.Free;
end;
end
//当图像为BMP时
else
if(Ext='.BMP') then
begin
SS:=TStringStream.Create('');
try
TBlobField(QueryLaoxiangPhoto).SaveToStream(SS);
SS.Position:=0;
ImgPhoto.Picture.Bitmap.LoadFromStream(SS);
ImgPhoto.Width:=190;
ImgPhoto.Height:=160;
k:=ImgPhoto.Picture.Bitmap.Width /ImgPhoto.Picture.Bitmap.Height;
if k>1 then
ImgPhoto.Height:=trunc(ImgPhoto.Width/k)
else
ImgPhoto.Width:=trunc(ImgPhoto.Height*k);
ImgPhoto.Height:=ImgPhoto.Height-5;
ImgPhoto.Width:=ImgPhoto.Width-5;
ImgPhoto.Left:=trunc((190-ImgPhoto.Width)/2);
ImgPhoto.Top:=trunc((160-ImgPhoto.Height)/2);
// ImgPhoto.Picture.Bitmap
finally
SS.Free;
end;
end
//图像不存在时
else
ImgPhoto.Picture:=nil;
end;
end;










procedure TForm1.BtnLoadPicClick(Sender: TObject);
var
sFile:String;
//文件名
Ext:String;
// 扩展名
k:double;
begin
if openPictureDialog.Execute then
begin
sFile:=openPictureDialog.FileName;
Ext:=ExtractFileExt(sFile);
Ext:=UpperCase(Ext);
//把图片和图片扩展名写入数据库
TBlobField(QueryLaoXiangPhoto).LoadFromFile(sFile);
QueryLaoXiang['PhotoType']:=Ext;
ImgPhoto.Picture.LoadFromFile(sFile);
ImgPhoto.Width:=190;
ImgPhoto.Height:=160;
k:=ImgPhoto.Picture.Width/ImgPhoto.Picture.Height;
if k>1 then
ImgPhoto.Height:=trunc(ImgPhoto.Width/k)
else
ImgPhoto.Width:=trunc(ImgPhoto.Height*k);
ImgPhoto.Height:=ImgPhoto.Height-5;
ImgPhoto.Width:=ImgPhoto.Width-5;
ImgPhoto.Left:=trunc((190-ImgPhoto.Width)/2);
ImgPhoto.Top:=trunc((160-ImgPhoto.Height)/2);
end;

end;
 
是ole类型。
 
把图片上传到服务器,然后把路径和文件名存入数据库,这样多好~[:D]
再说了,用access往里面存图片,不太好,如果以后数据大了,不方便,效率低!
建议还是把图片上传,然后存路径
 
赞成水水的办法,尽量保持数据库的小巧玲珑为好
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
802
DelphiTeacher的专栏
D
D
回复
0
查看
747
DelphiTeacher的专栏
D
后退
顶部