钱晓燕
摘 要:在数据库应用系统中,经常需要对图片进行处理,包括图片在数据库中的直接存储和只将图片地址存储于数据库中两种存储方式。本文主要论述了图片的存储方式、读取方式,它们各自的优缺点以及怎样存取才能达到效率最高。
关键词:移植性 数据负担 OlE 对象 图片地址
中图分类号:G718 文献标识码:A 文章编号:1674-2117(2014)22-00-01
在教学中,我们常常会用VB及Access做些小的数据库应用系统,如学籍管理系统、考试系统、图书管理系统等,在这些数据库应用系统中,经常需要对图片进行处理。图片在数据库中应该如何存取、怎样存取才能达到效率最高,是我们最常碰到又急需解决的问题。
1 图片在数据库中的存储
以考试管理系统为例来说,在考试报名界面上必须有考试照片,而这照片必须存入后台数据库中。图书管理系统新书入库时需将新书封面图片存入数据库等。
一般来说,图片在数据库中的存储有两种方式:直接将图片存储在数据库中和在数据库中存储图片地址。
1.1 直接将图片存储在数据库
这种存储方式采用的是数据流技术。数据库设计时,存储图片的字段数据类型定义为“OLE对象”。要插入图片直接双击该字段即可。若要在程序中写入数据库,实现代码如下:
SUB SFILE()
DIM STR As ADODB.STREAM
DIM REAS ADODB.RECORDSET
DIM STR AS STRING
SET STM = NEW ADODB.STREAM
STM.TYPE= ADTYPEBINARY
STM.OPEN
STM.LOADFROMFILE APP.PATH+”\ABC.JPG”
SET RE= NEW ADODB.RECORDESET
RE.OPEN”SELECT * FROM IMG” ,STM,1,3
RE.ADDNEW
RE.FIELDS(“PHOTO”)=STM.READ
RE.UPDATE
RE.CLOSE
STM.CLOSE
END SUB
从代码看图片操作与其他字段写入数据库基本一样,只不过使用的是流对象。它的优点是移植性好,不受系统前台程序约束,可在不同地方使用;缺点是加大了数据库的负担,在图片量大的情况下会导致数据读取、备份等操作缓慢。
1.2 将图片地址存储在数据库中
这种方式对数据库的操作简单,主要操作都在程序与操作系统之间的通信上了。只要将存储图片的字段数据类型定义为字符型即可。其操作与存储字符数据相同,用这样的方式首先要在代码中获取图片的地址,其他与存储普通类型数据代码类似。它的优点是只存储字符数据,数据库负担小,易于读取备份等;缺点是系统移植不方便,需要同时移植图片文件夹。
以上的两种方式都各有缺点,具体选用哪种方法要看所做系统的具体情况而定,一般来说,考虑到数据库的优化,一般采用存储图片地址这种存储方式。
2 图片从数据库中的读取
图片存入数据库是为了后期前台使用,如查询某考生的报考信息,则要调出考生照片,查询某本书籍资料,也要有相应的封面图片信息调出。
图片的存储有两种方式,相应的,从数据库中读取图片也有两种方式。
2.1 读取直接存储在数据库中的图片
由于存储时使用的是流对象 ADODB.STREAM,那么读取也需要流对象,代码如下:
SUB RFILE()
DIM STM AS ADODB.STREAM
DIM RE AS ADODB.RECORDSET
RE.OPEN “ select top 1* from img order by id desc”, iConc, adOpenKeyset , adLockReadOnly
SET STM =NEW ADODB.STREAM
STM.MODE=ADMODEREADWRITE
STM.TYPE= ADTYPEBINARY
STM.OPEN
STM.WRITE RE(“PHOTO”)
STM.SAVE TOFILE APP.PATH&”\ABC.JPG”
IMAGE1.
PICTURE=LOADPICTURE(APP.PATH&”\ABC.JPG”)
RE.CLOSE
STM.CLOSE
END SUB
2.2 讀取将地址存储在数据库中的图片
将地址存储于数据库中的图片则容易处理,直接调用获取字段值,再使用LOADPICTURE 函数显示图片即可。例如,要实现如图窗体功能,代码如下:
PRIVATE SUB COMMAND1_CLICK()
DIM CN AS ADODB.CONNECTIN
DIM RS AS ADODB.RECORDSET
DIM STR AS STRING
SET CN= NEW ADODB.CONNECTION
SET RS=NEW ADODB.RECORDSETCN.OPEN“PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=C:\EXCISE\FILE.MDB;PERSISR SECURITY INFO =FALSE”
SQL=”SELECT * FROM STUDENT WHEREXM=”张一””
Rs.open sql,cn ,1,1
TEXT1.TEXT=RS(“XM”)
TEXT2.TEXT=RS(“SEX”)
STR=RS(“PHOTO”)
IMAGE1.
PICTURE=LOADPICTURE(STR)
END SUB
由上述代码可知,图片的读取主要是获取路径后,使用函数LOADPICTURE 来显示。当然读取图片需要原来的路径,否则将无法显示。
总之在设计的数据库应用系统中采用什么样的图片存取方法,如何使系统更快捷高效地完成任务,需要根据实际情况及需要去进行选择。
(江苏省如东县中等专业学校,江苏 如东 226400)
参考文献:
[1]徐安东.visual basic 数据库应用开发教程[M].北京:清华大学出版社,2006.
[2]谭浩强.visual basic 程序设计[M].北京:清华大学出版社,2009.
[3]greg perry.学用 visual basic 6.0[M].北京:清华大学出版社,2011.
[4]刘涛.visualbasic数据库系统开发实例[M].北京:人民邮电出版社,2003.