如何在数据库中保存大量图片.pdf
文本预览下载声明
UMVsoft 技术文档
如何在数据库中保存大量图片
作者: 刘师义 上海盟威软件有限公司 软件开发工程师
时间: 2010/6/ 1
来源: 上海盟威软件有限公司() 。公司拥有以微软最有价值专家为核心的技术团队,专业从事
Aaccess 开发培训,学员可非脱产方式参加培训,自由安排学习时间,并通过网络获得公司的技术支持,几年来已为全
国各地大中型企事业单位培养了众多“精管理、懂编程”的复合型人才,详情了解: /training.asp 。
一、摘要:
我们将图片保存到数据库中,使用维护起来都变得很简单尤其适用于小型便携式的 Access 管理系
统。但如果直接通过绑定对象框控件的插入对象方法将图片插入的话,非位图图片体积会暴增几十上百
倍,从而大大降低了实用性。在本文中,讲述了如何将图片以原始大小保存到数据库中进行使用的方法。
二、正文:
一般情况下,如果要将图片保存到数据库中,都是通过绑定对象框的“插入对象”功能来实现,但
是这样做会造成数据库体积的明显增大。尤其是在Access 2007 之前的版本中所有插入的图上均会被转
换成位图,而如果把一个 JPG 图片转换成位图,我们会发现图片的大小增大了几十上百倍。那么有没
有一种办法能够直接把保存源格式的图片到数据库中呢?答案是肯定的,答案就在 ADO 中的流对象
(Stream )。此处要注意的是,ADO 必须是2.5 以及更新的版本,老版本中是没有流对象的。
流对象主要有两种用途:一种是处理文档数据,这样可以通过流对象的属性和方法来读取和修改文
档内容;另一种就是把其它任意格式的文件以二进制数据流进行处理,不关心文件的格式和内容。在本
文中我们讨论的是在数据库中存储图片,所以我们这里主要讨论的就是它的后一种用途。为了更容易理
解,我们在此基于一个示例程序来进行说明。
首先我们需要在表中添加至少两个字段,一个用来存放图片的名称,一个用来存放图片的二进制文
件数据:
然后我们基于此表来创建窗体,通过窗体实现图片的保存以及将保存的图片显示出来。在此窗体中
我们需要手动添加三个控件:
图像控件:名称:imgPic 图片类型:链接
按钮控件:名称:cmdAdd 标题:添加/更改图片 单击事件:[事件过程]
按钮控件:名称:cmdDel 标题:删除图片 单击事件:[事件过程]
由于相关的记录修改添加都是通过代码完成,所以我们需要将“图片名称”的“锁定”属性设为“是”,
另外图片数据是一个绑定对象框控件,它只用来存放图片文件数据,不需要显示出来,所以我们要将其
“可见性”属性设为“否”。(这里有一个可能由于ADO 的流对象和窗体绑定的DAO 记录集兼容性造
成的问题:向流对象中写入图片数据时,直接把窗体绑定记录集中“图片数据”字段值中的二进制数据
写入时会出错,需要绑定一个“绑定对象控件”,将控件中的二进制数据写入才不会出错。)
第1 页/共3 页
UMVsoft 技术文档
接下来我们需要在单击“添加/更改图片”按钮时将图片以二进制方式写入到数据库中,及以在窗
体的记录切换时自动将二进制数据再还原为图片文件,并以链接的方式显示在图像控件中,这些都需要
以编程方式来实现,具体实现代码如下:
添加图片并将图片保存到数据库中
Private Sub cmEdit_Click()
Dim stm As ADODB.Stream 定义流对象变量
Dim strPathName As String 文件名临时变量
调用Access 通用的文件选取对话框来选择一个图片文件(需要最低2003 版Access )
With FileDialog(3) msoFileDialogFilePicker
清除原有文件类型筛选
.Filters.Clear
添加自定义文件类型筛选
.Filters.Add 图片文件, *.jpg;*.
显示全部