您的位置:首页 > 数据库

读写数据库中的图片,用imageenmview控件来作显示

2013-04-03 11:14 357 查看
调用显示图片时作个判断

if edit_bz_bh.text<>'' then zp_show(imageenmview_bz,trim(edit_bz_bh.text);

或者放在edit_bz_bh的 change事件中

//显示图片

//myimageenmview是显示图片的控件,dm是关键了段

procedure zp_show(myimageenmview:timageenmview;dm:string);

var

i:integer;

fimage:TMemoryStream;

begin

//清空imageenmview中图片

for i:=myimageenmview.ImageCount-1 downto 0 do begin

myimageenmview.DeleteImage(i);

end;

//数据库查询

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);

myimageenmview.SelectedImage:=0;

fimage.Position:=0;

myimageenmview.MIO.LoadFromStream(fimage);

myimageenmview.ImageFileName[0]:=sqlquery1.FieldValues['编号'];

fimage.Free;//释放流

end;

end;

修改图片

procedure zp_change(myimageenmview:timageenmview;dm:string);

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;

//删除数据库中对应的照片

if myimageenmview.ImageCount>0 then begin

bh:=myimageenmview.ImageFileName[0];

sqlquery_zp.SQL.Text:='delete from db_zp where 编号='+quotedstr(bh);

sqlquery_zp.ExecSQL;

end;

//添加到删除数据库中db_delete //这里添加是为了导入本地数据时减少数据量

if myimageenmview.ImageCount>0 then begin

bh:=myimageenmview.ImageFileName[0];

sqlquery1.SQL.Text:='insert into db_delete(编号,日期) values(:a,:b)';

sqlquery1.Params.ParamByName('a').Value:=bh;

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(dm);

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);

fimage.Free;

exit;

end;

//更新ImageEnMView中的图片,先清空再读入。

//清空imageenmview中图片

for i:=myimageenmview.ImageCount-1 downto 0 do begin

myimageenmview.DeleteImage(i);

end;

//读入图片

myImageEnMView.SelectedImage:=0;

fimage.Position:=0;

myImageEnMView.MIO.LoadFromStream(fimage);

myimageenmview.ImageFileName[0]:=bh;

fimage.Free;

end;

//删除图片 只适用于单张图片的情况

procedure zp_delete(myimageenmview:timageenmview);

var

bh:string;

i:integer;

begin

if myimageenmview.ImageCount=0 then exit;

bh:=myimageenmview.ImageFileName[0];

//从数据库中删除

if application.messagebox(pansichar('当前选中的图片是否删除'),'记录删除',MB_YESNO)=IDNo then

exit;

sqlquery_zp.SQL.Text:='delete from db_zp where 编号='+quotedstr(bh);

sqlquery_zp.ExecSQL;

//添加到删除数据库中db_delete

sqlquery1.SQL.Text:='insert into db_delete(编号,日期) values(:a,:b)';

sqlquery1.Params.ParamByName('a').Value:=bh;

sqlquery1.Params.ParamByName('b').Value:=formatdatetime('YYYYMMDDHHMMSSZZZ',NOW);

sqlquery1.ExecSQL;

//清空imageenmview中的图片

for i:=myimageenmview.ImageCount-1 downto 0 do begin

myimageenmview.DeleteImage(i);

end;

end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐