将图片写入数据库? ( 积分: 20 )

  • 主题发起人 主题发起人 myfoot
  • 开始时间 开始时间
M

myfoot

Unregistered / Unconfirmed
GUEST, unregistred user!
我想将图片写入access数据库的字段里,该怎么做?
 
用文件流
 
兄台,能详细点吗?
 
var
Tp:TMemoryStream;

begin
If img3.Picture.Graphic<>nil then
begin
DM.tblImage.Append;
Tp := TMemoryStream.Create;
dm.tblImage.FieldByName('资产编号').AsString := edtzcbh.Text;
try
img3.Picture.Graphic.SaveToStream(Tp);
TBlobField( DM.tblImage.FieldByName('图片')).LoadFromStream(Tp);
DM.tblImage.Post;
tp.free;
except
MessageBox(Handle,'保存图片失败','提示',MB_ICONINFORMATION+mb_ok);
end
end;
 
建立好数据连接,设置好Table 、DataSource后,
新建DBimage1组件,定位到数据库中的图片字段,有以下几种方法输入图片:
1、通过文件对话框打开:
新建OpenPictureDialog1组件,写入以下程序:
Table1.Edit;
if OpenPictureDialog1.Execute then
begin
DBimage1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;
Table1.Post;
注意,要使用JPG文件时,在uses中加入JPEG单元;
2、从剪贴板粘贴,先用拷贝方式将图片拷贝入剪贴板
在uses中加入clipbrd单元,使用以下程序
Table1.Edit;
DBimage1.PasteFromClipboard;
Table1.Post;
以上两种应当是最简单的方法。
 
补充一下图形字段的删除:
DBimage1.Picture:=nil;
 
第二种方法再补充一下,先判断一下剪贴板是否有图形
If clipboard.HasFormat(CF_BITMAP) then
DBimage1.PasteFromClipboard;
 
Stream := TMemoryStream.Create; //创建内存流
Image.Picture.Graphic.SaveToStream(Stream); //将图片保存到内存流中
ADOQuery.Close;
ADOQuery.SQL.text := 'Insert into ' + Table +' values (:photo)'; // 进行插入操作
ADOQuery.Parameters.ParamByName('photo').LoadFromStream(Stream,ftBlob); //读取保存的内存图
ADOQuery.ExecSQL;
Stream.Free; //释放内存流
 
也可以把图片的路径保存到数据库中,
 
后退
顶部