VB.docx
- 文档编号:6835883
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:6
- 大小:18.29KB
VB.docx
《VB.docx》由会员分享,可在线阅读,更多相关《VB.docx(6页珍藏版)》请在冰豆网上搜索。
VB
VB实现图像在数据库的存储与显示
发表时间:
2009-08-28编辑:
Jakie来源:
编程爱好者网站
编者按:
摘要本文以VB6与Access97作为开发工具,介绍了图像在数据库中的存储与显示技术。
关键词数据库,数据控件,二进制,图像存储,图像显示,A...
摘要本文以VB6与Access97作为开发工具,介绍了图像在数据库中的存储与显示技术。
关键词数据库,数据控件,二进制,图像存储,图像显示,ADODB,Recordset
数据库是数据管理的最新技术,是计算机科学的重要分支,是现代计算机信息系统和计算机应用的基础和核心。
在科学技术高速发展的今天,在信息资源无处不在、无处不用,已成为各部门的重要财富的时候,对于从事程序开发的人员来说显得尤为重要。
如今,对数据库的操作不仅仅满足于对字符和数字的单一操作,图像的存储与显示已显得尤为重要。
下面作者将以VB6.0与Access97作为开发工具,分别介绍两种图像显示与存储的方法。
利用数据控件和数据绑定控件
利用这种方法,不写或写少量代码就可以构造简单的数据库应用程序,这种方法易于被初学者接受。
在举例之前,先把数据绑定功能简要的说明一下,凡是具有DataSource属性的控件都是对数据敏感的,它们都能通过数据控件直接使用数据库里的数据。
比如CheckBoxControl,ComboBoxComtrol,TextBoxComtrol,PictureBoxControl,ImageComtrol…因为这种方式涉及到的知识点比较少,也比较容易理解,不多作说明,现直接介绍编程步骤。
1、从数据库中显示所需要的图片
首先,添加一个Data数据控件,设置它的DatabaseName和RecordSource属性,
strPath=App.Path
IfRight(strPath,1)<>"\"Then
strPath=strPath&"\"
MyData.DatabaseName=strPath&"ExampleDB.mdb"数据库存地址
MyData.RecordSource="Info"表名
第二步,添加Image控件用来显示图片,设置它的DataSource和DataField属性。
例如本例中:
Image1.DataSource="MyData"和Image1.DataField="MyPhoto"。
然后设置其它具有数据绑定功能的控件用来显示所要的其它内容,经过这两步的操作,运行程序就可以显示你要的数据了。
2、向数据库中添加需要存储的图片
首先,利用数据控件所具有的AddNew属性,添加一个按钮,双击后添加如下代码MyData.Recordset.AddNew
第二步,为Image控件图片指定图片路径Image1.Picture=LoadPicture("图片路径"),经过这两步的操作,就可以向数据库中添加图片了。
这种方法最简单快捷,要写的代码量很少。
但是这种方法在运行速度和灵活性方面有一定的限制,适合于初学者和一些简单的应用,要想灵活多变的显示图像,下面介绍的方法或许更适应您的要求。
利用编写代码实现图片的存储与显示
这种方法相对于方法一来说,代码量大,但是它操作灵活,能够满足多样形式下的操作,受到更多编程者的青睐。
但是涉及到的知识面相对要多一些,不仅要掌握数据库的操作方法,还要二进制文件的读写作进一步的了解。
关于数据库及二进制文件的基本操作很多参考书上都介绍的比较详细,需要时请查阅即可。
在编程之前把本部分用到的变量说明如下:
DimRSAsNewADODB.Recordset
DimChunk()AsByte
ConstChunkSizeAsInteger=2384
DimDataFileAsInteger,Chunks,FragmentAsInteger
DimMediaTempAsString
DimlngOffset,lngTotalSizeAsLong
DimiAsInteger
1、从数据库中显示所需要的图片
第一步首先打开数据库,看有没有要查找的内容,有则继续执行,没有就退出
RS.Source="select*fromInfoWhereName="&sparaName&";"
RS.ActiveConnection="UID=;PWD=;DSN=TestDB;"
RS.Open
IfRS.EOFThenRS.cCose:
ExitSub
第二步,读出长二进制数据即图片数据,把它转换成图片文件,操作过程如下
MediaTemp=strPath&"picturetemp.tmp"
DataFile=1
OpenMediaTempForBinaryAccessWriteAsDataFile
lngTotalSize=RS!
MyPhoto.ActualSize
Chunks=lngTotalSize\ChunkSize
Fragment=lngTotalSizeModChunkSize
ReDimChunk(Fragment)
Chunk()=RS!
MyPhoto.GetChunk(Fragment)
PutDataFile,,Chunk()
Fori=1ToChunks
ReDimChunk(ChunkSize)
Chunk()=RS!
MyPhoto.GetChunk(ChunkSize)
PutDataFile,,Chunk()
Nexti
CloseDataFile
第三步,关闭数据库,这样就可以显示所要的图片了。
RS.Close
IfMediaTemp=""ThenExitSub
Picture1.Picture=LoadPicture(MediaTemp)
IfPicture1.Picture=0ThenExitSubj
2、向数据库中添加需要存储的图片
向数据库添加存储的图片是显示图片逆过程,只要掌握了显示图片的操作,存储图片的操作也就迎刃而解了,下面将操作步骤介绍如下
第一步首先打开数据库,过程如下:
RS.Source="select*fromInfo;"
RS.CursorType=adOpenKeyset
RS.LockType=adLockOptimistic
RS.ActiveConnection="UID=;PWD=;DSN=TestDB;"
RS.Open
第二步,把要存储的图片转换成二进制长文件存入数据库中,操作过程如下
RS.AddNew
DataFile=1
OpenstrPathPictureForBinaryAccessReadAsDataFile
FileLen=LOF(DataFile)文件中数据长度
IfFileLen=0Then:
CloseDataFile:
RS.Close:
ExitSub
Chunks=FileLen\ChunkSize
Fragment=FileLenModChunkSize
ReDimChunk(Fragment)
GetDataFile,,Chunk()
RS!
MyPhoto.AppendChunkChunk()
ReDimChunk(ChunkSize)
Fori=1ToChunks
GetDataFile,,Chunk()
RS!
MyPhoto.AppendChunkChunk()
Nexti
CloseDataFile
第三步,更新纪录后,关闭数据库,就完成了数据图片到数据库的存储。
RS.Update
RS.Close
SetRS=Nothing
两种方法在使用方面各有所长,读者可以针对自己的情况做出合理的选择。
DimMstAsStream
DimrsAsADODB.Recordset
----------------------------------------
SetMst=NewADODB.Stream
Mst.Type=adTypeBinary'二进制类型
Mst.Open
Mst.LoadFromFileMystr'加载图片,Mystr为图片路径
rs.fields("images")=Mst.Read'保存到数据库
----------------------------------------
VB中如何实从数据库中读写二进制图片信息
以下VB代码是用来向数据库中读写图片信息的。
函数中的两个参数分别提供数据表中存储图片信息的字段名和要存储的图片的路径信息。
在读图片时提供数据表中存储图片信息的字段名参数就可以了,我在做软件时用的是ACCESS数据库,调用形式如下WriteImage(RS.Fields("photos"),mstrFileName)RS是ADODB.Recordset的记录集对象。
程序详细注解如下。
PublicSubWriteImage(ByRefFldAsADODB.Field,DiskFileAsString)
DimbyteData()AsByte'定义数据块数组
DimNumBlocksAsLong'定义数据块个数
DimFileLengthAsLong'标识文件长度
DimLeftOverAsLong'定义剩余字节长度
DimSourceFileAsLong'定义自由文件号
DimiAsLong'定义循环变量
ConstBLOCKSIZE=4096'每次读写块的大小
SourceFile=FreeFile'提供一个尚未使用的文件号
OpenDiskFileForBinaryAccessReadAsSourceFile'打开文件
FileLength=LOF(SourceFile)'得到文件长度
IfFileLength=0Then'判断文件是否存在
CloseSourceFile
MsgBoxDiskFile&"无内容或不存在!
"
Else
NumBlocks=FileLength\BLOCKSIZE'得到数据块的个数
LeftOver=FileLengthModBLOCKSIZE'得到剩余字节数
Fld.Value=Null
ReDimbyteData(BLOCKSIZE)'重新定义数据块的大小
Fori=1ToNumBlocks
GetSourceFile,,byteData()'读到内存块中
Fld.AppendChunkbyteData()'写入FLD
Nexti
ReDimbyteData(LeftOver)'重新定义数据块的大小
GetSourceFile,,byteData()'读到内存块中
Fld.AppendChunkbyteData()'写入FLD
CloseSourceFile'关闭源文件
EndIf
EndSub
PublicFunctionReadImage(blobColumnAsADODB.Field)AsString
'取得一个临时性文件
DimstrFileNameAsString
strFileName="ImageTmp"
DimFileNumber AsInteger '文件号
DimDataLen AsLong '文件长度
DimChunks AsLong '数据块数
DimChunkAry() AsByte '数据块数组
DimChunkSize AsLong '数据块大小
DimFragment AsLong '零碎数据大小
DimlngI AsLong'计数器
OnErrorGoToerrHander
ChunkSize=2048 '定义块大小为2K
IfIsNull(blobColumn)ThenExitFunction
DataLen=blobColumn.ActualSize '获得图像大小
IfDataLen<8ThenExitFunction '图像大小小于8字节时认为不是图像信息
FileNumber=FreeFile '产生随机的文件号
OpenstrFileNameForBinaryAccessWriteAsFileNumber '打开存放图像数据文件
Chunks=DataLen\ChunkSize '数据块数
Fragment=DataLenModChunkSize '零碎数据
IfFragment>0Then '有零碎数据,则先读该数据
ReDimChunkAry(Fragment-1)
ChunkAry=blobColumn.GetChunk(Fragment)
PutFileNumber,,ChunkAry '写入文件
EndIf
ReDimChunkAry(ChunkSize-1) '为数据块重新开辟空间
ForlngI=1ToChunks '循环读出所有块
ChunkAry=blobColumn.GetChunk(ChunkSize) '在数据库中连续读数据块
PutFileNumber,,ChunkAry() '将数据块写入文件中
NextlngI
CloseFileNumber '关闭文件
ReadImage=strFileName'把生成的临时图片文件的文件名作为函数的结果返回给调用对象
ExitFunction
errHander:
ReadImage=""
EndFunction
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB