一、數據庫的設計 數據庫可以采用微軟的Access97或者SQLServer來進行,首先新建一張表,取名為Table,添加三個字段,分別是:姓名Char型(SQLServer中)文本型(Access中);編號Char型(SQLServer中)文本型(Access中);照片image型(SQLServer中)OLE對象(Access中),設計好後存盤。為了可以進行遠程調用,我們采用ODBC的方法進行,雙擊打開控制面板裡的ODBC數據源,界面如圖1所示:
點“系統DSN”選項卡,按“添加”按鈕選擇對應的數據源驅動程序Access的*.mdb或者SQLServer,依照添加向導加添加數據源,下面就可以開始程序的編寫了。
二、程序的編寫
運行VB,新建一個工程。本程序采用ADO控件和動態鏈接庫訪問數據庫,需要加入ADO的運行庫,單擊“工程引用”菜單,出現引用對話框,選擇MicrosoftActiveXDataObjects2.0Library並確定。
添加一個Form,四個Label控件,兩個TextBox控件,一個PictureBox控件,一個ADODC控件,三個CommandButton控件,一個CommandDialog控件,如果ADODC和CommandDialog控件沒有出現在工具框上,請單擊菜單“工程部件”。點“控件”選項卡,在其中選中MicrosoftADODataControl6.0(OLEDB)和MicrosoftCommonDialogControl6.0兩項按“確定”按鈕。
下面是以上各個控件的一些屬性:
Form1.MaxButton=False
Label1.Caption=姓名:
Label2.Caption=編號:
Label3.Name=ResName
Label3.BackColor=&H80000009&
Label3.BorderStyle=1-FixedSingle
Label3.DataField=姓名
Label3.DataSource=AdoCtr
Label4.Name=ResNumb
Label4.BackColor=&H80000009&
Label4.BorderStyle=1-FixedSingle
Label4.DataField=編號
Label4.DataSource=AdoCtr
Text1.Name=Names
Text2.Name=Numb
CommonDialog1.Name=CDlg
Adodc1.Name=AdoCtr
CommonButton1.Name=PreView
CommonButton1.Caption=預覽
CommonButton2.Name=Save
CommonButton2.Caption=保存
CommonButton3.Name=Update
CommonButton3.Caption=更新
PictureBox1.Name=PicBox
PictureBox1.AutoSize=False
PictureBox1.AutoRedraw=False
PictureBox1.DataField=照片
PictureBox1.DataSource=AdpCtr
下面是程序代碼:
′此工程需有MicrosoftActiveXDataObject2.1Library(msado15.dll)
DimConstrAsString′ODBC路徑
DimFileNameAsString′圖片文件名
ConstBLOCKSIZE=4096′每次讀寫塊的大小
DimADOConAsNewADODB.Connection′ADODBConnection對象
DimADORstAsNewADODB.Recordset′ADODBRecordset對象
DimADOFldAsADODB.Field′ADODBField對象
------------------------
PrivateSubSaveToDB(ByRefFldAsADODB.Field,DiskFileAsString)
DimbyteData()AsByte′定義數據塊數組
DimNumBlocksAsLong′定義數據塊個數
DimFileLengthAsLong′標識文件長度
DimLeftOverAsLong′定義剩余字節長度
DimSourceFileAsLong′定義自由文件號
DimiAsLong′定義循環變量
SourceFile=FreeFile′提供一個尚未使用的文件號
OpenDiskFileForBinaryAccessReadAsSourceFile′打開文件
FileLength=LOF(SourceFile)′得到文件長度
IfFileLength=0Then′判斷文件是否存在
CloseSourceFile
MsgBoxDiskFile&″無內容或不存在!″
Else
NumBlocks=FileLengthBLOCKSIZE′得到數據塊的個數
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
----------------------
PrivateSubForm_Load()
Constr=″DSN=image″′定義ODBC連接
ADOCon.OpenConstr′創建一個連接
ADORst.Open″table″,ADOCon,adOpenDynamic,adLockOptimistic
′打開一個ADO動態集表名為table
SetAdoCtr.Recordset=ADORst′將動態集賦給ADO控件
EndSub
----------------------
PrivateSubForm_Unload(CancelAsInteger)
′記得關閉打開的數據集,釋放資源
ADORst.Close
ADOCon.Close
SetADORst=Nothing
SetADOCon=Nothing
EndSub
----------------------
PrivateSubPreView_Click()
′顯示打開文件的公用對話框,選擇需要加入數據庫的圖片
CDlg.Filter=″位圖(*.bmp)|*.bmp″
CDlg.ShowOpen
FileName=CDlg.FileName
PicBox.Picture=LoadPicture(FileName)′預覽圖片
EndSub
----------------------
PrivateSubSave_Click()
ADORst.AddNew′新增紀錄
ADORst(″姓名″).Value=Names.Text′給動態集的第一個字段賦值
ADORst(″編號″).Value=Numb.Text′給動態集的第二個字段賦值
SetADOFld=ADORst(″照片″)′給ADODB.Field對象賦值
CallSaveToDB(ADOFld,FileName)′調用子程序,給第三個字段(image)賦值
ADORst.Update
EndSub
----------------------
PrivateSubUpdate_Click()
′重新打開紀錄集,刷新紀錄
ADORst.Close
ADOCon.Close
SetADORst=Nothing
SetADOCon=Nothing
ADOCon.OpenConstr
ADORst.Open″table″,ADOCon,adOpenDynamic,adLockOptimistic
SetAdoCtr.Recordset=ADORst
EndSub
程序運行後的結果如圖2。
本程序在VB6.0/Windows98/WindowsNT下編譯通過。->