delphi 中操作 图片保存读取access数据库

Sql数据库可以存放图片这是以前听过,但是一直都没相信的事情,这阵子由于工作需求,遍开始尝试存取,在网上找了很多方法,试了都是可以存,但是却始终取不出来,研究了两天,最终实现了,现将代码共享出来,大家一起探讨~

首先目标数据库表存在一格式为image字段,开始,下面为存放的代码,表名字和字段自行修改

procedure TForm1.Button1Click(Sender: TObject);
var
F:File of Byte;
size:Longint;   //文件大小
FilePath,time:string;     //文件时间
begin
FilePath:=ExtractFilePath(Paramstr(0))+'demo.jpg';//图片地址为当前目录下
AssignFile(F,FilePath);
reset(F);
size:=Filesize(F);//获取文件大小。
time:=DatetimetoStr(FileDateToDateTime(FileAge(FilePath)));//获取文件创建时间。
closefile(F);
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from Image');
adoquery1.Open;
adoquery1.Insert;
adoquery1.FieldByName('FileName').AsString:=ExtractFileName(FilePath);     //存储文件名称
adoquery1.FieldByName('FileKind').AsString:=ExtractFileExt(FilePath);       //存储文件扩展名。
adoquery1.FieldByName('FileSize').AsInteger:=size;         //存储文件的大小。
adoquery1.FieldByName('FileTime').AsString:=time;           //存储文件的创建时间。
adoquery1.FieldByName('SaveTime').AsDateTime:=now();//存取文件的存储时间
TBlobField(ADOquery1.FieldByName('FileContent')).LoadFromFile(FilePath);

//图片的二进制流,存进去之后,数据库会显示(<>)
ADOquery1.Post;
end;

下面是读取还有代开的代码,添加一个Timage空间进行显示,ID为我的自增列,读取最后一条插入记录

procedure TForm1.Button2Click(Sender: TObject);
Var
Ms:TStream;
jpg:Tjpegimage;
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select top 1 * from Image order by id desc');
adoquery1.Open;
Ms:=TStream.Create;
MS:=adoquery1.CreateBlobStream(adoquery1.FieldbyName('FileContent'),bmRead);
Ms.Position :=0;
jpg:=Tjpegimage.Create;
Jpg.LoadFromStream(Ms);
Image1.Picture.Assign(Jpg);
jpg.Free;
MS.Free;
end;

当然这里你也可以将其中的代码修改一下,不用显示就把“Image1.Picture.Assign(Jpg);”改为保存“Jpg.SaveToFile(图片路径);”

字段名称    类型    描述
  id    自动编号   主键值
img OLE对象   用来保存图片数据

procedure TForm1.Button1Click(Sender: TObject);
var
F:File of Byte;
size:Longint; //文件大小
FilePath,time:string; //文件时间
begin
FilePath:=ExtractFilePath(Paramstr(0))+'demo.jpg';//图片地址为当前目录下
AssignFile(F,FilePath);
reset(F);
size:=Filesize(F);//获取文件大小。
time:=DatetimetoStr(FileDateToDateTime(FileAge(FilePath)));//获取文件创建时间。
closefile(F);
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from Image');
adoquery1.Open;
adoquery1.Insert;
adoquery1.FieldByName('FileName').AsString:=ExtractFileName(FilePath); //存储文件名称
adoquery1.FieldByName('FileKind').AsString:=ExtractFileExt(FilePath); //存储文件扩展名。
adoquery1.FieldByName('FileSize').AsInteger:=size; //存储文件的大小。
adoquery1.FieldByName('FileTime').AsString:=time; //存储文件的创建时间。
adoquery1.FieldByName('SaveTime').AsDateTime:=now();//存取文件的存储时间
TBlobField(ADOquery1.FieldByName('FileContent')).LoadFromFile(FilePath);

//图片的二进制流,存进去之后,数据库会显示(<>)
ADOquery1.Post;
end;

下面是读取还有代开的代码,添加一个Timage空间进行显示,ID为我的自增列,读取最后一条插入记录

procedure TForm1.Button2Click(Sender: TObject);
Var
Ms:TStream;
jpg:Tjpegimage;
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select top 1 * from Image order by id desc');
adoquery1.Open;
Ms:=TStream.Create;
MS:=adoquery1.CreateBlobStream(adoquery1.FieldbyName('FileContent'),bmRead);
Ms.Position :=0;
jpg:=Tjpegimage.Create;
Jpg.LoadFromStream(Ms);
Image1.Picture.Assign(Jpg);
jpg.Free;
MS.Free;
end;

当然这里你也可以将其中的代码修改一下,不用显示就把“Image1.Picture.Assign(Jpg);”改为保存“Jpg.SaveToFile(图片路径);”

你可能感兴趣的:(Delphi)