用VB6读写数据库中的图片

本文介绍了一种使用VBA编程从Access数据库读取和写入图片的方法。通过示例代码展示了如何打开数据库连接、获取人员列表以及显示指定人员的图片。此外,还提供了添加新记录和图片到数据库的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

'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 StringAs Long 
Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long
ByVal lpBuffer 
As StringAs 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 


 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值