`

Delphi中怎么样才能将照片保存到ACCESS数据库里

 
阅读更多

一、 原理介绍--流式数据的类型及其应用在Dephi中提供了TStream来支持对流式数据的操作。TStream是万流之源。但由于它是一个抽象类,故不能被直接使用;而要使用其相应的子类,如:TFileStream 、TStringStream、TMemoryStream、TBlobStream、TWinSocketStream和TOleStream。TStream提供了统一、简洁的方法来进行数据的读写。1.)SaveToStream(Stream: TStream ); 作用:将类中的数据写到Stream的当前位置中2.)LoadFromStream(Stream: TStream); 作用:从当前位置读入Stream里的数据实际使用时我们基本上只要使用上面两个函数就可以了。

二、所遇到的问题及相应的解决方法为了节省图像的存储空间和使用更加方便,决定采用JPEG这种图像格式。

(一)所遇到的问题第一、在Delphi 5中进行画图所用到的组件是TImage,所生成的图像的格式为BMP格式,而为了节省图像的存储空间,图像在数据库里存储的格式须为JPEG格式,这样就产生了图像格式转化的需求;而TImage本身并不直接提供这两种图像格式之间的转化。第二、怎样将存储在Microsoft Access数据库中的图像取出并且显示出来:在Delphi 5中,能提供这种功能的组件是TDBImage,但该组件却存在着一个很大的缺陷:它所能显示的图像类型只能是一些图标文件,元文件和BMP文件,而不能支持JPEG格式的图像在该组件中的显示;但根据实际需要,在Microsoft Access数据库中所存储的图像数据却是以JPEG格式保存的。

(二)相应的解决方法 为了解决上述两个问题,可以采用目前数据库中一种名为大二分对象(BLOB--Binary Large Object),它是用来处理某些特殊格式的数据的。BLOB在数据库的表中实际上是以二进制数据的形式存放的。为了处理BLOB字段,可以借鉴一些可视的桌面数据库的方法。在这里,我们选择了通过内存流的方式来完成;

使用内存流,可减少磁盘操作,大大提高运行效率。具体的过程和相关的程序代码如下:

1、如何实现在Microsoft Access数据库中的图像存储:这里是利用TStream的子类TMemoryStream向Microsoft Access数据库中存储图像的。

下面的这段代码是在按了“保存”按钮之后所触发的事件处理程序:

procedure TForm1.Button1Click(Sender: TObject);Var MyJPEG : TJPEGImage; MS: TMemoryStream;Begin MyJPEG := TJPEGImage.Create; Try With MyJPEG do Begin Assign(Image.Picture.Graphic); MS:=TMemoryStream.create; SaveToStream(MS); MS.Position := 0; Table1.Edit; TBlobField(Table1.FieldbyName('Image')).LoadFromStream(MS); Table1.Post; Messagebox(Getactivewindow(), '图像保存完毕!', '保存', MB_OK); End; Finally MyJPEG.Free; End;End;在这段代码里TStream的子类TMemoryStream利用内存流起到了将BMP格式转化为JPEG格式的中间桥梁的作用。2、如何将图像从Microsoft Access数据库中取出并显示出来:下面的这段代码是在按了“查看图像”按钮之后所触发的事件处理程序:procedure TForm1.Button1Click(Sender: TObject);VarMyJPEG : TJPEGImage; MS : TMemoryStream;BeginTry MS := TMemoryStream.Create;TBlobField(Query1.FieldByName('Image')).SaveToStream(MS);MS.Position := 0;MyJPEG := TJPEGImage.Create; MyJPEG.LoadFromStream(MS);DBImage1.Picture.Bitmap.Assign(MyJPEG); //或是Sender.Picture.Assign(MyJPEG);Finally MS.Free;MyJPEG.Free;End;End;这段代码的主要作用是:首先将查询结果中的JPEG图像格式数据保存到TMemoryStream中去,然后设置数据指针在TMemoryStream中的位置为0;接着从TMemoryStream中读入相关数据,并把它们赋给TDBImage.Picture.Bitmap,这样一来就实现了将数据库中所存储的JPEG格式的数据转化为BMP格式,并在TDBImage中将图像显示出来。最后将TMemoryStream和TJPEGImage这两个对象释放掉。特别要注意的是不能在设计阶段设置TDBImage的DataField属性,而只能通过写代码的形式在运行阶段把利用流式数据所转化过来的新格式的图像数据赋给TDBImage.Picture.Bitmap。BTW:用到TBlobField的时候要在接口包含DB,用到TJPEGImage时要在接口包含Jpeg

分享到:
评论

相关推荐

    把图片保存到Access数据库中 Delphi环境代码.rar

    Delphi代码实现把图片保存到Access数据库中,测试了下,代码在Delphi7中直接编译运行,然后选择需要保存到数据库里的图片即可,还可预览所要保存的图片,把图片保存在Access中有好处也有坏外,好外是便于移植携带...

    Delphi环境下Access数据库中OLE对象的读写操作(论文)

    分析了Access数据库OLE 对象的特点,并给 出了在 Delphi环境下实际实现OLE对 象的保存\打 开与显示的处理方法(A ccess 数 据库 中 O LE 对象 的读 写操 作 许 俊 论文)

    合并多个相同access数据库到一起delphi源代码

    此程序可以合并程序目录中“明细数据”文件夹中任何多个mdb数据,也可以使用密码(稍作修改,代码有注释),由于使用的是clientdataset,所以数据没有保存到表中,可以保存到本地xml文件中,可以不用"合并数据库.mdb...

    delphi access 保存取出文件

    delphi 数据库 保存 取出 任意类型文件

    delphi7操作数据库之Access

    delphi7操作数据库之Access、数据库的连接与操作

    Delphi保存数据格式为dat数据库格式.rar

    Delphi保存数据格式为dat数据库格式,就像操作常规的Access或SQL那样插入记录、删除记录,浏览记录等,让新手朋友了解一下Delphi如何建立DAT格式的数据库,包括如何更新数据记录等操作。。当程序打开时初始化Form中...

    Delphi导出Access数据库内容到Word中

    摘要:Delphi源码,数据库应用,Word Delphi导出Access数据库内容到Word中,数据库的导入导出功能,一个简单的例子,对此有需求的可参考一下。

    delphi定时获取指定网页并写入数据库(可最小化托盘)

    定时获取指定网页内容后写入数据库,并最小化托盘,由于使用MYSQL数据库,数据连接使用了MySQL.Data.Access.Components.v5.80.0.47组件。可设置自动更新时间。

    地税局发票打印系统 .rar_DELPHI 数据库_delphi 登陆_jet db_数据库 delphi

    正配置数据才能运行 1.如果你没有配置数据库,那会提示你没有配置,强出一个框,你按确定后,进入登陆窗口,在最下面有一个新键配置方案,单击此处,然后弹出一个配置框,相信编写数据的朋友们应该知道怎么做了吧,我的是...

    Delphi结合ACCESS学习用品仓库管理系统.rar

    学习用品仓库管理,Delphi Access数据库版,共享模块,保存字符串资源和共享常量、变量、函数及过程。  功能:基础信息设置、进货录入、数据管理、报表统计、系统设置、进仓出仓统计、部门领取统计、个人领取统计...

    简洁型收支管理软件 ACCESS数据库

    用DELPHI开发的一个小型收支管理软件 双击列表框可以保存字段 密码为空 数据库密码为xbf

    Delphi 开发的STR明细表查询系统.rar

    Delphi7.0与Access数据库联合开发的明细表查询系统,STR明细表查询系统3.0版本,主要功能有:快速查询STR零部件的:应用信息、组成信息、产品信息、路线信息,快速展开总成零件,并提供实用的保存功能。包含文件: ...

    Delphi零售业进销存管理系统源码

    Enterprise Manager来把它回存到所建立的数据库中。 2、“零售业进销存管理系统”这个目录,则是存放本书第8章到第17的实践主题??“零售业进销存管理系 统”的相关数据。“零售业进销存管理系统原始程序代码”...

    Delphi进销存程序设计(含源代码)

    在“范例数据库MSSQL数据库备份”,则是有这两个数据库的备份,我们可以用Microsoft SQL Server的Enterprise Manager来把它回存到所建立的数据库中。2、“零售业进销存管理系统”这个目录,则是存放本书第8章到第17...

    通用数据库查看器1.0

    可自定义及保存ADO连接(基于Delphi),以连接更多数据库! 2.不懂SQL语句也可执行一些基本查询! 3.可执行及保存一些基本SQL查询语句! 4.当打开的数据库表(例如SQL SERVER)所有者不是dbo时也可执行查询 ...

    ACC数据库查看器

    可自定义及保存ADO连接,以连接更多数据库! 2.不懂SQL语句也可执行一些基本查询! 3.可执行及保存一些基本SQL查询执行语句! 4.当打开的数据库表(例如SQL SERVER)所有者不是dbo时也可执行查询 5.可方便的编辑...

    Delphi Access文字资料管理系统.rar

    Delphi Access文字资料管理系统,主要用来保存网上发现的好文、技巧文萃之类的,类似于收藏夹,收藏以文章为主的资料,数据库采用Access,程序虽小,不过用到了窗体界面的设计、数据库的操作基础等知识,对新手来说...

    Delphi开发范例宝典目录

    实例289 如何将图片从数据库中提取出来 380 实例290 原生ADO应用技术 381 实例291 标准记录编辑界面 383 实例292 获取驱动列表并加载指定的驱动 385 实例293 获取驱动所支持的表名 387 实例294 创建表和...

    邮件接收客户端(delphi7+access+sakmail)

    采用sakmail控件开发的一个邮件接收客户端。 收到的邮件内容保存在数据库中。 符件存放在邮件编号同名目录中! 有需要的朋友可以下载,改写源代码!

Global site tag (gtag.js) - Google Analytics