图片存放到数据库中采用流的方式存入取出
一般将所有数据表中的图片字段(mysql为 longblob,mssql为image)放入到一个db_zp表中,需要图片的时候再进行读取
图片显示 zp_bz_show
图片修改
图片删除
//在grid cellclick中加一语句
zp_bz_show;
//图片显示
procedure TDLLFORM.zp_bz_show;
var
i:integer;
dm:string;
fimage:TMemoryStream;
begin
//清空imageenmview中图片
for i:=imageenmview_bz.ImageCount-1 downto 0 do begin
imageenmview_bz.DeleteImage(i);
end;
//得到与照片数据库相关联的代码 这里用
if edit_bz_bh.text='' then exit;
dm:=trim(edit_bz_bh.text);
// if sqlquery_bz.Eof then exit;
// dm:=sqlquery_bz.FieldValues['编号'];
//数据库查询
sqlquery1.SQL.Text:='select * from db_zp where 代码='+quotedstr(dm);
sqlquery1.open;
sqlquery1.First;
if sqlquery1.Eof then exit; //不存在相关的记录就退出
sqlquery1.First;
if not sqlquery1.Eof then begin
fimage:=tmemorystream.Create;
TBlobField(sqlquery1.FieldByName('照片')).SaveToStream(fimage);
ImageEnMView_bz.SelectedImage:=0;
fimage.Position:=0;
ImageEnMView_bz.MIO.LoadFromStream(fimage);
imageenmview_bz.ImageFileName[0]:=sqlquery1.FieldValues['编号'];
fimage.Free;//释放流
end;
end;
//图片修改按钮
var
bh,filename:string;
i,iw,ih:integer;
imageenviewx:TImageEnView;
fimage:TMemoryStream;
begin
//打开图片对话框
if openpicturedialog1.Execute =false then exit;
filename:=openpicturedialog1.FileName;
//从INi文件中读取预设图片宽度,如果读入图片大于这个数值就进行压缩
iw:=strtointdef(readinis(ExtractFilePath(Paramstr(0))+'\info.ini','info','imagewidth'),600);
//将图片转换大小并存入stream
imageenviewx:=TImageEnView.Create(dllform);
fimage:=TMemoryStream.Create;
imageenviewx.IO.LoadFromFile(filename);
ih:=imageenviewx.Bitmap.Height;
if imageenviewx.Bitmap.Width>iw then begin //判断图片宽是否大于预设,是的话就进行缩放
ih:=round(ih*iw/imageenviewx.Bitmap.Width);
imageenviewx.Proc.Resample(iw,ih);
end;
imageenviewx.IO.SaveToStreamJpeg(fimage);
imageenviewx.Free;
//删除数据库中对应的照片
sqlquery_zp.SQL.Text:='delete from db_zp where 代码='+quotedstr(edit_bz_bh.Text);
sqlquery_zp.ExecSQL;
//添加到删除数据库中db_delete //这里添加是为了导入本地数据时减少数据量
if imageenmview_bz.ImageCount>0 then begin
sqlquery1.SQL.Text:='insert into db_delete(编号,日期) values(:a,:b)';
sqlquery1.Params.ParamByName('a').Value:=imageenmview_bz.ImageFileName[0];
sqlquery1.Params.ParamByName('b').Value:=formatdatetime('YYYYMMDDHHMMSSZZZ',NOW);
sqlquery1.ExecSQL;
end;
//将内存中的图片放入数据库中, 在MYSQL5中图片存使用GB2312字符集,普通操作使用GBK
sqlquery_zp.SQL.Text:='insert into db_zp(编号,代码,照片,修改日期) values(:a,:b,:c,:d)';
bh:='ZP'+formatdatetime('YYYYMMDDHHMMSSZZZ',NOW);
sqlquery_zp.Params.ParamByName('a').Text:=bh;
sqlquery_zp.Params.ParamByName('b').text:=UpperCase(edit_bz_bh.Text);//如果有2-3个固定的图片,可以在这里加前缀L,M,R
sqlquery_zp.Params.ParamByName('c').LoadFromstream(fimage,ftBlob);
sqlquery_zp.Params.ParamByName('d').Text:=formatdatetime('YYYYMMDDHHMMSSZZZ',NOW);
try
sqlquery_zp.ExecSQL;
except
application.MessageBox(' 错误: 照片数据库添加资料失败 ','信息',MB_OK);
exit;
end;
//更新ImageEnMView中的图片,先清空再读入。
//清空imageenmview中图片
for i:=imageenmview_bz.ImageCount-1 downto 0 do begin
imageenmview_bz.DeleteImage(i);
end;
//读入图片
ImageEnMView_bz.SelectedImage:=0;
fimage.Position:=0;
ImageEnMView_bz.MIO.LoadFromStream(fimage);
imageenmview_bz.ImageFileName[0]:=bh;
fimage.Free;
end;
//图片删除按钮
var
bh:string;
i:integer;
begin
//从数据库中删除
if imageenmview_bz.ImageCount=0 then exit;
if application.messagebox(pansichar('当前选中的图片是否删除'),'记录删除',MB_YESNO)=IDNo then exit;
sqlquery_zp.SQL.Text:='delete from db_zp where 代码='+quotedstr(edit_bz_bh.Text);
sqlquery_zp.ExecSQL;
//添加到删除数据库中db_delete
sqlquery1.SQL.Text:='insert into db_delete(编号,日期) values(:a,:b)';
sqlquery1.Params.ParamByName('a').Value:=imageenmview_bz.ImageFileName[0];
sqlquery1.Params.ParamByName('b').Value:=formatdatetime('YYYYMMDDHHMMSSZZZ',NOW);
sqlquery1.ExecSQL;
//清空imageenmview中图片
for i:=imageenmview_bz.ImageCount-1 downto 0 do begin
imageenmview_bz.DeleteImage(i);
end;
end;
图片在数据库中的操作
最新推荐文章于 2022-12-02 09:36:15 发布