top
Loading...
在VB中存取數據庫中的圖片

一、 數據庫的設計

數據庫可以采用微軟的Access97或者SQL Server來進行,首先新建一張表,取名為Table,添加三個字段,分別是:姓名 Char型(SQL Server中)文本型(Access中);編號Char型(SQL Server中)文本型(Access中);照片image型(SQL Server中)OLE對象(Access中),設計好后存盤。為了可以進行遠程調用,我們采用ODBC的方法進行,雙擊打開控制面板里的ODBC數據源,點“系統DSN”選項卡,按“添加”按鈕選擇對應的數據源驅動程序Access的*.mdb或者SQL Server,依照添加向導加添加數據源,下面就可以開始程序的編寫了。

二、 程序的編寫

運行VB,新建一個工程。本程序采用ADO控件和動態鏈接庫訪問數據庫,需要加入ADO的運行庫,單擊“工程引用”菜單,出現引用對話框,選擇Microsoft ActiveX Data Objects2.0 Library并確定。

添加一個Form,四個Label控件,兩個TextBox控件,一個PictureBox控件,一個ADODC控件,三個CommandButton控件,一個CommandDialog控件,如果ADODC和CommandDialog控件沒有出現在工具框上,請單擊菜單“工程部件”。點“控件”選項卡,在其中選中Microsoft ADO Data Control 6.0(OLEDB)和Microsoft Common Dialog Control 6.0兩項按“確定”按鈕。

下面是以上各個控件的一些屬性:

Form1.MaxButton=False
Label1.Caption=姓名:
Label2.Caption=編號:
Label3.Name= ResName
Label3.BackColor= &H80000009&
Label3.BorderStyle=1-Fixed Single
Label3.DataField=姓名
Label3.DataSource= AdoCtr
Label4.Name= ResNumb
Label4.BackColor= &H80000009&
Label4.BorderStyle=1-Fixed Single
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

下面是程序代碼:

此工程需有Microsoft ActiveX Data Object 2.1 Library(msado15.dll)


Dim Constr As String ′ODBC路徑
Dim FileName As String ′圖片文件名
Const BLOCKSIZE = 4096 ′每次讀寫塊的大小
Dim ADOCon As New ADODB.Connection ′ADODB Connection對象
Dim ADORst As New ADODB.Recordset ′ADODB Recordset 對象
Dim ADOFld As ADODB.Field ′ADODB Field 對象
------------------------
Private Sub SaveToDB(ByRef Fld As ADODB.Field, DiskFile As String)
Dim byteData() As Byte ′定義數據塊數組
Dim NumBlocks As Long ′定義數據塊個數
Dim FileLength As Long ′標識文件長度
Dim LeftOver As Long′定義剩余字節長度
Dim SourceFile As Long ′定義自由文件號
Dim i As Long ′定義循環變量
SourceFile = FreeFile ′提供一個尚未使用的文件號
Open DiskFile For Binary Access Read As SourceFile ′打開文件
FileLength = LOF(SourceFile) ′得到文件長度
If FileLength = 0 Then ′判斷文件是否存在
Close SourceFile
MsgBox DiskFile & ″ 無 內 容 或 不 存 在 !″
Else
NumBlocks = FileLength BLOCKSIZE ′得到數據塊的個數
LeftOver = FileLength Mod BLOCKSIZE ′得到剩余字節數
Fld.Value = Null
ReDim byteData(BLOCKSIZE) ′重新定義數據塊的大小
For i = 1 To NumBlocks
Get SourceFile, , byteData() ′ 讀到內存塊中
Fld.AppendChunk byteData() ′寫入FLD
Next i
ReDim byteData(LeftOver) ′重新定義數據塊的大小
Get SourceFile, , byteData() ′讀到內存塊中
Fld.AppendChunk byteData() ′寫入FLD
Close SourceFile ′關閉源文件
End If
End Sub

----------------------


Private Sub Form_Load()
Constr = ″DSN=image″ ′定義ODBC連接
ADOCon.Open Constr ′創建一個連接
ADORst.Open ″table″, ADOCon, adOpenDynamic, adLockOptimistic
打開一個ADO動態集 表名為table
Set AdoCtr.Recordset = ADORst ′將動態集賦給ADO控件
End Sub

----------------------


Private Sub Form_Unload(Cancel As Integer)
記得關閉打開的數據集,釋放資源
ADORst.Close
ADOCon.Close
Set ADORst = Nothing
Set ADOCon = Nothing
End Sub

----------------------

Private Sub PreView_Click()
顯示打開文件的公用對話框,選擇需要加入數據庫的圖片
CDlg.Filter = ″位圖(*.bmp)|*.bmp″
CDlg.ShowOpen
FileName = CDlg.FileName
PicBox.Picture = LoadPicture(FileName) ′預覽圖片
End Sub

----------------------

Private Sub Save_Click()
ADORst.AddNew ′新增紀錄
ADORst(″姓名″).Value = Names.Text ′給動態集的第一個字段賦值
ADORst(″編號″).Value = Numb.Text ′給動態集的第二個字段賦值
Set ADOFld = ADORst(″照片″) ′給ADODB.Field對象賦值
Call SaveToDB(ADOFld, FileName)
調用子程序,給第三個字段(image)賦值
ADORst.Update
End Sub

----------------------

Private Sub Update_Click()
重新打開紀錄集,刷新紀錄
ADORst.Close
ADOCon.Close
Set ADORst = Nothing
Set ADOCon = Nothing
ADOCon.Open Constr
ADORst.Open ″table″, ADOCon, adOpenDynamic, adLockOptimistic
Set AdoCtr.Recordset = ADORst
End Sub

本程序在VB6.0/Windows98/WindowsNT下編譯通過。
作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗