張園園
(山西省大同市大同煤炭職業(yè)技術(shù)學(xué)院,山西大同037003)
我們?cè)谠O(shè)計(jì)某些信息管理系統(tǒng)時(shí)經(jīng)常遇到需要處理圖片的情況。如圖1所示的一個(gè)學(xué)生信息管理系統(tǒng)的界面中,我們希望把每名學(xué)生的照片放在窗體上,使界面更加生動(dòng)、信息更加全面。同樣,在進(jìn)行報(bào)名信息管理時(shí),我們也希望在界面上能看到考生的照片,方便考生進(jìn)行信息核對(duì)。諸如此類圖片的處理一直都是比較復(fù)雜的,尤其是對(duì)于初學(xué)者。
圖1 學(xué)生管理
在數(shù)據(jù)庫中,圖片的特殊性有兩點(diǎn):1、圖片所占存儲(chǔ)空間常常是比較大的;2、圖片的處理常常需要外部的程序。編寫代碼對(duì)于初學(xué)者有一定難度。
我們常用ACCESS來設(shè)計(jì)一般的小型數(shù)據(jù)庫。在ACCESS中,備注數(shù)據(jù)類型可以存儲(chǔ)最多65,535個(gè)字符,而OLE對(duì)象數(shù)據(jù)類型可以存儲(chǔ)最多1 G字節(jié)的鏈接或嵌入的對(duì)象(例如Microsoft Excel電子表格、Microsoft Word文檔、圖形、聲音或其它二進(jìn)制數(shù)據(jù))。因?yàn)閳D片的大小常超出備注數(shù)據(jù)類型的限制,且用OLE類型更方便,所以我們利用ACCESS數(shù)據(jù)庫中的OLE數(shù)據(jù)類型存儲(chǔ)圖片,在VB程序中用OLE控件處理圖片。但是由于OLE對(duì)象不能支持ADO和OLEDB,我們要用DAO來連接數(shù)據(jù),處理起來不方便。
下面介紹一種在VB程序中處理ACCESS數(shù)據(jù)庫中處理圖片的辦法。準(zhǔn)確地說圖片沒有真正放在ACCESS數(shù)據(jù)庫,巧妙在于筆者是把圖片文件的文件名以字符型數(shù)據(jù)存放在數(shù)據(jù)庫中。同樣可以實(shí)現(xiàn)如圖1所示添加記錄中的圖片,還可以更改原有照片。
VB前臺(tái)用戶界面與后臺(tái)數(shù)據(jù)庫的連接采用方便、靈活、性能更優(yōu)的ADO控件。
具體方法如下:
在設(shè)計(jì)數(shù)據(jù)庫時(shí)除如圖2所示的平常字段外,還需添加名稱為“zaop”的字段來存放圖片文件名的信息。字段的類型用文本型。這是問題的關(guān)鍵,“zaop”的字段必需為文本型,而不是OLE對(duì)象。
圖2 學(xué)生表
第一步:加入部件
在“工程”菜單的“部件”選項(xiàng)卡的“控件”列表中找到Microsoft ADO Data Control 6.0,單擊左端的復(fù)選框,使之顯示對(duì)號(hào)√,然后單擊“確定”鈕,完成添加。同時(shí)在工具箱可見ADO控件。
第二步:添加控件、改變屬性
為窗體添加ADO控件,默認(rèn)名稱為Adodc1。并連接數(shù)據(jù)庫文件和表。
這里要注意的是:如圖3所示,連接到數(shù)據(jù)庫后要?jiǎng)h除數(shù)據(jù)庫前面的路徑,只留下數(shù)據(jù)庫文件名。而且數(shù)據(jù)庫文件要與工程文件放在同一目錄中。
圖3 連接數(shù)據(jù)庫
第三步:將窗體上有關(guān)的文本框綁定到ADODC控件上
對(duì)除命令按鈕和圖像框的其它對(duì)象設(shè)置如下兩個(gè)屬性值:
DataSource:數(shù)據(jù)源就是ADODC控件;
Datafield:數(shù)據(jù)字段就是表的字段,此處選擇你該使用的字段。
第四步:在代碼中使用ADODC控件對(duì)象的屬性和方法
主要是調(diào)動(dòng)其Recordset記錄集對(duì)象的屬性、方法等來實(shí)現(xiàn)按鈕的功能。這里要討論的是“添加或更換照片”這個(gè)按鈕功能的實(shí)現(xiàn),其它的不再贅述。
(1)首先在窗體上需要添加一個(gè)通用對(duì)話框:“MicroSoft Common Dialog Control 6.0”。
(2)編寫“添加或更換照片”按鈕的功能,這是本程序的最關(guān)鍵的地方,代碼如下:
lj=App.Path'對(duì)工程所在路徑賦值給變量
Cd2.ShowOpen'通用對(duì)話框執(zhí)行打開方法選取準(zhǔn)備添加或更改的圖片文件
ff=Cd2.FileName'把上面通用對(duì)話框所選取的圖片文件保存在變量中,注意此時(shí)保存的文件的絕對(duì)路徑
zaopian=Mid(ff,Len(App.Path)+2,Len(ff)-Len(App.Path))'利用函數(shù)截取所選取的圖片文件的文件名部分
student.Recordset.Fields("zaop").Value=zaopian'把圖片文件名寫入到數(shù)據(jù)庫存放圖片字段名的字段zaop中
student.Recordset.Update
ChDrive App.Path'設(shè)當(dāng)前驅(qū)動(dòng)器為工程所在驅(qū)動(dòng)器
ChDir App.Path'設(shè)當(dāng)前目錄為工程所在目錄
Image1.Picture=LoadPicture(zaopian)
(3)在瀏覽數(shù)據(jù)庫的記錄的各按鈕上實(shí)現(xiàn)照片的顯示功能,以“下一條”按鈕為例,代碼如下:
在設(shè)計(jì)程序時(shí)可以把所有學(xué)生的照片文件存放在工程所在目錄的一個(gè)子目錄中如“PIC”,這樣管理起來比較方便。以上是筆者對(duì)數(shù)據(jù)庫中的圖片處理摸索的另一種途徑,希望能對(duì)有需要的VB的初學(xué)者以及本課程的教師有所幫助。