如何利用VB6_0存取Access中的图像数据
作者简介:符钰(1981-),女,江苏泰州人,助教.
第8卷第1期
2008年2月泰州职业技术学院学报
JournalofTaizhouPolytechnicalInstituteVol.8No.1Feb.2008
摘要:随着社会的不断发展,信息管理也日趋复杂。单纯的文本信息存储已经不能适应时代
的需要,更多的时候,人们需要对大量的图像信息进行存储。因此,图像信息的最佳存
储方式已经成为人们研究的焦点。以VisualBasic6.0和Access2000为基础,利用数
据控件和数据绑定控件、Chunk方法和Stream对象来实现图像的存取是三种较为实
用的图像存储策略。
关键词:文本信息存储;图像信息存储;一般策略;改进策略
中图分类号:TP391文献标识码:A文章编号:1671-0142(2008)01-0015-04
1问题的提出
在传统的管理信息系统中,主要对文本信息进行存储、检索和维护。然而随着社会的不断发展,单纯的文本信息已经不能满足人们的日常需要,多媒体信息(如图像、声音、视频等)已成为一个新的需求。在这些媒体信息中,图像占据着非常重要的地位。图像存取是图像管理中的一个关键技术,是进行图像操作的前提,有着广泛的实际应用背景,如工程图纸的存储,地理信息系统中地图的显示,学生学籍管理中学生相片的管理等。它利用图像采集设备把文档原件的图像信息存储转化成计算机可识别的数字信息,压缩处理后,存储到海量存储设备中,实现海量数据的在线存储。其特点是便于管理、查询,降低了存储成本。并利用计算机网络,通过打印机输出,也可以通过传真或电子邮件发出。因此,图像存储管理系统的应用需求日益迫切。
2图像存储的一般策略
图像存取的一般方法是将图像文件作为一个外部文件处理,在数据库中存放该图像文件的文件名及路径信息。该方法可以节省数据空间,避免了数据库过分膨胀,但同时这种方法过分依赖于路径信息,一旦图像文件的路径发生变化,系统将失去对它的管理。此外,在基于C/S结构的应用系统中,为了使得每个客户机都能浏览图像,只能将图像文件拷贝到客户机上,同一份数据在多台机器上存储容易导致数据不一致,影响信息共享。
因此,要真正做到各类数据在数据库中的安全管理,研究和探索直接将图像数据存储在数据库关系表中的方法是非常必要的。本文以VisualBasic6.0和Access2000作为开发工具,分别介绍如何从数据库中存取图像数据的三种方法。
3
图像存储的改进策略3.1利用数据控件和数据绑定控件
利用这种方法,不写或写少量代码就可以构造简单的数据库应用程序。下面就是通过VB6.0来实现对Access中的图像数据进行显示的一个具体实例。
(1)在Access中建立数据库“学生信息管理”,在该数据库中建立“学生通讯录表”(见表1),其中包如何利用VB6.0存取Access中的图像数据
符钰,刘永胜
(泰州职业技术学院,江苏泰州225300)
括:姓名、住址、电话、相片四项。在该数据表中输入相应的记录,其中,“照片”字段中内容暂不输入。
(2)启动VB,建立一个标准EXE工程,在该工程中添加窗体,如图1所示:其中,将Adodc1控件与数据库“学生信息管理”连接,表名选择“学生通讯录”。三个文本框和一个图片框的DataSource属性设置为Adodc1,DataField属性设置为相应的字段。
(3)编写程序代码
“添加”按钮:Adodc1.Recordset.AddNew‘向数据库中写入一条新的空白记录。
“添加照片”按钮:
WithCmDialog
.DialogTitle=”
装入图片”.Filter=”(点阵图)*.bmp|*.bmp|(JPEG图)*.jpg|*.jpg”
.DefaultExt=”*.bmp”
.ShowOpen
If.FileName<>”
”ThenPicture1.Picture=LoadPicture(.FileName)
EndIf
EndWith
为图片框指定相应图片,“保存”按钮:Adodc1.Recordset.Update‘将缓冲区中的数据(包括图像数据)保存到新添加的记录中。
(4)程序运行时,只需单击Adodc1控件的左右箭头即可对数据库中的数据(包括图像数据)进行浏览。这种方法比较简单,是三种方法中代码编写量最少的一种,但它不够灵活,必须使用控件绑定的方法,这样,对于存取数据库中的声音、视频等大字段来说,就无能为力了。
3.2利用Chunk编写代码,实现图像的存取
VB6.0的ADOField对象提供了GetChunk方法和AppendChunk方法来存取BLOB数据。
(1)AppendChunk方法主要用于将数据追加到大型文本、二进制数据或对象中。在Field对象上的第一个AppendChunk调用将数据写入字段,覆盖任何现有的数据,随后的AppendChunk调用则将数据添加到现有数据中[1]。
其语法格式为:Object.AppendChunkData
由于系统资源总是有限的,如果一次存大量数据,可能会引起服务器、客户机死机或是服务器的性能大大下降,因此使用这个函数时,要将图像数据进行分段写。
程序代码为:
ConstBlockSize=2048‘数据块大小
DimBlockNumAsLong‘数据块数
DimLeftOverAsLong‘剩余字节长度
表1
学生通讯录表字段名称
数据类型长度姓名
住址
电话
照片TextTextTextBinary82020
图1窗体控件的设计图
第1期泰州职业技术学院学报16
17第1期符钰,刘永胜:如何利用VB6.0存取Access中的图像数据
DimByteDataAsByte‘数据块数组,用于保存图像数据
DimPicAsString‘图像文件名
DimSourceFileAsInteger‘文件号
DimFileLengthAsLong‘文件长度
OnErrorGoToErrorHandle
CommonDialog1.Filter=”(*.bmp;*.ico)|*.bmp;*.ico”
CommonDialog1.ShowOpen
Pic=CommonDialog1.Filename
SourceFile=FreeFile‘产生随机的文件号
OpenPicForBinaryAccessReadAsSourceFile‘打开图像文件
FileLength=Lof(SourceFile)‘获取文件长度
IfFileLength=0then‘判断文件是否存在
CloseSourceFile
MsgBoxPic&“不存在或者无内容”
Else
BlockNum=FileLength\BlockSize‘数据块的个数
LeftOver=FileLengthmodBlockSize
IfLeftOver>0Then‘先写零碎数据
ReDimByteData(LeftOver-1)
GetSourceFile,,ByteData()‘读出文件
Fld.AppendChunkByteData‘调用AppendChunk函数写数据
EndIf
ReDimByteData(BlockSize-1)‘为数据块开辟空间
Fori=1toBlockNum‘循环读出所有数据块
GetSourceFile,,ByteData()‘读出一块数据
Fld.AppendChunkByteData‘在数据库中增加数据块
Next
EndIf
CloseSourceFile‘关闭文件
ErrorHandle:
MsgBoxErr.Description,vbCritical,"写图像数据出错!"
(2)GetChunk方法主要用于读取BLOB数据。GetChunk调用返回的数据将赋给“变量”。如果Size大于剩余的数据,则GetChunk仅返回剩余的数据而无需用空白填充“变量”。如果字段为空,则GetChunk方法返回Null。每个后续的GetChunk调用将检索从前一次GetChunk调用停止处开始的数据。由于GetChunk与AppendChunk的使用方法类似,此处不再复述。
这种方法相对于第一种方法而言,代码量较大,但是它操作灵活,能够满足多种形式下的操作需求,受到大多数编程者的青睐。但是,随着软件的发展,Chunk方法虽然在VB6.0中能很好的工作,但在最新的.Net版本中却不能正常工作。所以,从发展的角度看,第三种方法更有前途。
3.3利用Stream对象,实现图像的存取
ADOLibrary2.5以上的版本为用户提供了一种Stream对象,利用该对象的Read和Write方法可以分别将图像文件存入和读出数据库[2]。
(1)将图像文件存入数据库:
DimgStreamAsADODB.Stream
IfDir(FileName)<>”
”Then‘判断文件是否存在SetgStream=NewADODB.Stream
‘创建流对象gStream.Type=adTypeBinary
gStream.Open
gStream.LoadFromFile(FileName)‘从磁盘中载入图像文件内容
rs.AddNew
rs.Fields(“图像”).Value=gStream.Read‘存入数据库
rs.Update
gStream.Close‘关闭流对象
Else
MsgBox“文件不存在,请重新指定文件!”
,vbExclamation,”注意”EndIf
(2)读取图像文件的过程与存入过程类似,只需将Read方法改为Write方法即可。
4结语
对于一个数据库管理信息系统,经常会对图像数据进行处理,图像数据的处理和普通数据的处理有所不同。本文主要对数据库图像字段的三种存取方法进行了介绍和比较,这对于数据库管理系统的开发具有一定的参考价值。
参考文献:
[1]StevenHolzner[美].VisualBasic6技术内幕[M].北京:机械工业出版社,2000.
[2]FronckowiakJW,HeldaJD[美].VisualBasic6数据库编程大全[M].北京:电子工业出版社,1999.
HowtoUseVB6.0toStoreImageDatainAccess
FUYu,LIUYong-sheng
(TaizhouPolytechnicCollege,TaizhouJiangsu225300,China)
Abstract:Withthedevelopmentofoursociety,informationmanagementisbecomingmorecomplicated.Purestorageoftextinformationcan’tmeettheneedofthisage.Onmanyoccasions,peopleneedtostoreagreatdealofimageinformation.Sothebestmethodtostoreimageinformationhasbecomethefocusofourresearch.BasedonVisualBasic6.0andAccess2000,StoringimageinformationbyusingDataControl,ChuckMethodandStreamObjectarethreepracticalstrategiesofimagestorage.
Keywords:textinformationstorage;imageinformationstorage;generalstrategy;improvedstrategy
(责任编辑崔洁)第1期
泰州职业技术学院学报18