首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

VB6 讀寫資料庫二進位圖片(OLE Object / Image 欄位)完整範例

     編輯:關於SqlServer

資料表結構範例

欄位名資料類型說明
NameChar人名
PictureOLE Object (Access) / Image (SQL Server)二進位圖片資料
FileLengthNumber檔案大小(選填)

核心元件

  • Common Dialog Control 6.0(選取檔案)
  • PictureBox(顯示圖片)
  • ListBox(列出人名)
  • ADODB.Connection / Recordset

關鍵程式碼片段

暫存檔處理 API

Private Declare Function GetTempFileName Lib "kernel32" Alias "GetTempFileNameA" _
    (ByVal lpszPath As String, ByVal lpPrefixString As String, _
     ByVal wUnique As Long, ByVal lpTempFileName As String) As Long
Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" _
    (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Const MAX_PATH = 260
Private Const BLOCK_SIZE = 10000  ' 分塊讀寫大小

Form_Load:開啟連線並填入 ListBox

Private Sub Form_Load()
    Dim db_file As String, rs As ADODB.Recordset
    db_file = App.Path & "\dbpict.mdb"
    Set m_DBConn = New ADODB.Connection
    m_DBConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & db_file
    Set rs = m_DBConn.Execute("SELECT Name FROM People ORDER BY Name", , adCmdText)
    Do While Not rs.EOF
        lstPeople.AddItem rs!Name
        rs.MoveNext
    Loop
    rs.Close
End Sub

讀取圖片:lstPeople_Click

Private Sub lstPeople_Click()
    Dim rs As ADODB.Recordset, bytes() As Byte, file_name As String
    Set rs = m_DBConn.Execute("SELECT Picture, FileLength FROM People WHERE Name='" & lstPeople.Text & "'")
    If Not rs.EOF Then
        bytes = rs!Picture  ' 直接取得二進位陣列
        file_name = TemporaryFileName
        Open file_name For Binary Access Write As #1
        Put #1, , bytes
        Close #1
        picPhoto.Picture = LoadPicture(file_name)
        Kill file_name
    End If
    rs.Close
End Sub

寫入圖片:cmdSave_Click

Private Sub cmdSave_Click()
    Dim bytes() As Byte, file_name As String
    If CommonDialog1.ShowOpen Then
        file_name = CommonDialog1.FileName
        Open file_name For Binary Access Read As #1
        ReDim bytes(LOF(1) - 1)
        Get #1, , bytes
        Close #1
        m_DBConn.Execute "UPDATE People SET Picture = ?, FileLength = ? WHERE Name = '" & lstPeople.Text & "'", _
            Array(bytes, UBound(bytes) + 1), adCmdText
    End If
End Sub

SQL Server 版本調整

將 Picture 欄位類型改為 image(或 SQL 2005+ 的 varbinary(max)),連接字串改用 SQLOLEDB,其餘邏輯不變。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved