| 
         
     
     | 
     | 
    
  
    | 
    用VB6读写数据库中的图片 | 
   
  
     | 
   
  
     | 
   
  
    | 
     作者:未知  来源:月光软件站  加入时间:2005-2-28 月光软件站  | 
   
  
    1,以人名和相关图片为例说明,数据库为Access,有如下字段:Name char,picture OLE object,FileLength  Number。当为ms sql时,将picture改为lob即可。  2,示例包含control:commom dialog,picture,listbox。  源码如下:  Option Explicit 
  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 m_DBConn As ADODB.Connection 
  Private Const BLOCK_SIZE = 10000  注释: Return a temporary file name.  Private Function TemporaryFileName() As String  Dim temp_path As String  Dim temp_file As String  Dim length As Long 
  注释: Get the temporary file path.  temp_path = Space$(MAX_PATH)  length = GetTempPath(MAX_PATH, temp_path)  temp_path = Left$(temp_path, length) 
  注释: Get the file name.  temp_file = Space$(MAX_PATH)  GetTempFileName temp_path, "per", 0, temp_file  TemporaryFileName = Left$(temp_file, InStr(temp_file, Chr$(0)) - 1)  End Function  Private Sub Form_Load()  Dim db_file As String  Dim rs As ADODB.Recordset 
  注释: Get the database file name.  db_file = App.Path  If Right$(db_file, 1) <> "" Then db_file = db_file & ""  db_file = db_file & "dbpict.mdb" 
  注释: Open the database connection.  Set m_DBConn = New ADODB.Connection  m_DBConn.Open _  "Provider=Microsoft.Jet.OLEDB.4.0;" & _  "Data Source=" & db_file & ";" & _  "Persist Security Info=False" 
  注释: Get the list of people.  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  Set rs = Nothing  End Sub  Private Sub Form_Resize()  lstPeople.Height = ScaleHeight  End Sub 
 
  注释: Display the clicked person.  Private Sub lstPeople_Click()  Dim rs As ADODB.Recordset  Dim bytes() As Byte  Dim file_name As String  Dim file_num As Integer  Dim file_length As Long  Dim num_blocks As Long  Dim left_over As Long  Dim block_num As Long  Dim hgt As Single 
  picPerson.Visible = False  Screen.MousePointer = vbHourglass  DoEvents 
  注释: Get the record.  Set rs = m_DBConn.Execute("SELECT * FROM People WHERE Name=注释:" & _  lstPeople.Text & "注释:", , adCmdText)  If rs.EOF Then Exit Sub 
  注释: Get a temporary file name.  file_name = TemporaryFileName() 
  注释: Open the file.  file_num = FreeFile  Open file_name For Binary As #file_num 
  注释: Copy the data into the file.  file_length = rs!FileLength  num_blocks = file_length / BLOCK_SIZE  left_over = file_length Mod BLOCK_SIZE 
  For block_num = 1 To num_blocks  bytes() = rs!Picture.GetChunk(BLOCK_SIZE)  Put #file_num, , bytes()  Next block_num 
  If left_over > 0 Then  bytes() = rs!Picture.GetChunk(left_over)  Put #file_num, , bytes()  End If 
  Close #file_num 
  注释: Display the picture file.  picPerson.Picture = LoadPicture(file_name)  picPerson.Visible = True 
  Width = picPerson.Left + picPerson.Width + Width - ScaleWidth  hgt = picPerson.Top + picPerson.Height + Height - ScaleHeight  If hgt < 1440 Then hgt = 1440  Height = hgt 
  Kill file_name  Screen.MousePointer = vbDefault  End Sub 
  Private Sub mnuRecordAdd_Click()  Dim rs As ADODB.Recordset  Dim person_name As String  Dim file_num As String  Dim file_length As String  Dim bytes() As Byte  Dim num_blocks As Long  Dim left_over As Long  Dim block_num As Long 
  person_name = InputBox("Name")  If Len(person_name) = 0 Then Exit Sub 
  dlgPicture.Flags = _  cdlOFNFileMustExist Or _  cdlOFNHideReadOnly Or _  cdlOFNExplorer  dlgPicture.CancelError = True  dlgPicture.Filter = "Graphics Files|*.bmp;*.ico;*.jpg;*.gif" 
  On Error Resume Next  dlgPicture.ShowOpen  If Err.Number = cdlCancel Then  Exit Sub  ElseIf Err.Number <> 0 Then  MsgBox "Error " & Format$(Err.Number) & _  " selecting file." & vbCrLf & Err.Description  Exit Sub  End If 
  注释: Open the picture file.  file_num = FreeFile  Open dlgPicture.FileName For Binary Access Read As #file_num 
  file_length = LOF(file_num)  If file_length > 0 Then  num_blocks = file_length / BLOCK_SIZE  left_over = file_length Mod BLOCK_SIZE 
  Set rs = New ADODB.Recordset  rs.CursorType = adOpenKeyset  rs.LockType = adLockOptimistic  rs.Open "Select Name, Picture, FileLength FROM People", m_DBConn 
  rs.AddNew  rs!Name = person_name  rs!FileLength = file_length 
  ReDim bytes(BLOCK_SIZE)  For block_num = 1 To num_blocks  Get #file_num, , bytes()  rs!Picture.AppendChunk bytes()  Next block_num 
  If left_over > 0 Then  ReDim bytes(left_over)  Get #file_num, , bytes()  rs!Picture.AppendChunk bytes()  End If 
  rs.Update  Close #file_num 
  lstPeople.AddItem person_name  lstPeople.Text = person_name  End If  End Sub 
  
 
  | 
   
  
     | 
   
  
     相关文章:相关软件:  | 
   
   
      |