vb向資料庫中讀取單個圖片檔案

lmdcszh發表於2011-09-04

vb中 圖片檔案和聲音檔案不能直接寫入資料庫,需要將其轉化成二進位制檔案,怎麼轉化成二進位制檔案呢?這裡就用到了ADODB的Stream物件,這個物件與RecordSet物件有許多類似之處(比如都可以作為一個臨時容器盛放資料,但Stream物件盛放的是二進位制格式的);二者之間也有非常密切的關係(RecordSet物件許藉助Stream物件寫入二進位制格式的檔案)。當然直接將大量的圖片和聲音這種比較龐大的資料放入資料庫會大大影響執行速率,但在初學階段做一嘗試也是很有意思的。下面就是一些簡單的程式碼,實現對於指定的圖片檔案向資料庫中新增、讀取、刪除的操作。

'此函式實現儲存檔案到資料庫中。分兩步完成,
'第一步:先載入指定圖片檔案以二進位制的形式存到Stream物件中;
'第二步:將Stream中的二進位制資料寫到資料庫的一個表中。
'這裡的Stream物件起到了一個轉化和快取的作用
Sub s_SaveFile()
        Dim iStm As ADODB.Stream
        Dim iRe As ADODB.Recordset
        Dim iConcstr As String

        '例項化Stream物件
        Set iStm = New ADODB.Stream
        '讀取檔案到內容
        With iStm
                 '設定資料流為:二進位制模式
                .Type = adTypeBinary
                '開啟Stream物件
                .Open
                '向Stream物件中載入圖片
                .LoadFromFile App.Path + "\黎敏.jpg "
        End With
        
        '將Stream物件中的資料寫入image表的photo欄位
        Set iRe = New ADODB.Recordset

        Dim SQL As String
        Dim MsgText As String
        SQL = "select * from image"
        Set iRe = ExecuteSQL(SQL, MsgText)
        
        With iRe
                '新增一條記錄
                .AddNew
                '將Stream物件中的資料寫入image表的photo欄位
                .Fields("photo") = iStm.Read
                .Update
        End With
        
      '完成後關閉物件
        iRe.Close
        '資料流物件也要有相關的處理
        iStm.Close
End Sub

'將資料庫中的二進位制形式的圖片檔案讀出,分三步完成
'第一步:將資料庫中的檔案讀取到Stream物件中
'第二步:將Stream物件中的圖片檔案讀到一個臨時檔案中
'第三步:將臨時檔案中的圖片檔案載入到圖片控制元件中
'在操作的時候應注意,Stream跟Recordset物件類似,
'都可以儲存一定的臨時檔案,相當於一個臨時容器,
'當操作完畢的時候應及時清空,或者關閉
Sub s_ReadFile()

        Dim iStm As ADODB.Stream
        Dim iRe  As ADODB.Recordset
        '開啟表
        Set iRe = New ADODB.Recordset
        Dim SQL As String
        Dim MsgText As String
        
        '臨時檔案,用來儲存讀出的圖片
        Dim StrPicTemp
        StrPicTemp = "c:\temp.tmp "
        
        SQL = "select top 1 * from image"
        Set iRe = ExecuteSQL(SQL, MsgText)
    
         '儲存到檔案,基於資料流
         Set iStm = New ADODB.Stream
         With iStm
                 .Mode = adModeReadWrite
                 .Type = adTypeBinary
                 .Open
                 .Write iRe("photo")
                 
                  '將Stream中資料寫入臨時檔案中
                 .SaveToFile StrPicTemp, adSaveCreateOverWrite
         End With
    
        iRe.Close
        iStm.Close
        
        '從臨時檔案中獲取圖片檔案
        Image1.Picture = LoadPicture(StrPicTemp)
End Sub


Private Sub cmdDelete_Click()
    Dim SQL As String
    Dim MsgText As String
    Dim iRe As ADODB.Recordset
    '注意這裡的iRe記錄集不用關閉,
    '因為delete語句執行完之後已經自動關閉物件,
    '否則會提示關閉物件時不允許操作的錯誤
    SQL = "delete image"
    Set iRe = ExecuteSQL(SQL, MsgText)

    
End Sub

Private Sub cmdRead_Click()
    Call s_ReadFile
End Sub

Private Sub cmdSave_Click()
    Call s_SaveFile
End Sub


 

 

相關文章