錢曉燕
摘 要:在數據庫應用系統中,經常需要對圖片進行處理,包括圖片在數據庫中的直接存儲和只將圖片地址存儲于數據庫中兩種存儲方式。本文主要論述了圖片的存儲方式、讀取方式,它們各自的優缺點以及怎樣存取才能達到效率最高。
關鍵詞:移植性 數據負擔 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.