下面有一段存、取图片的例子,你可以照着试一下Public Function FileToDb(ByVal ColSize As ADODB.Field, ColBlob As ADODB.Field, ByVal FileName As String) As Integer '本函数将文件数据传入BLOB字段 '入口: 'ColBlob 传值 包含BLOB字段的rdoColumn对象 'FileName传值 数据文件名 '出口: 'FileToDb= '1 不是blob类型数据 '2 文件不存在 '3 0长度文件 '10TEXT型成功返回 '12IMAGE型成功返回 '标准引用: 'FileToDb(rs.rdoColumns("at"), "c:\2.att") Dim sf As Integer Dim Bindata() As Byte Dim txtdata As String If Dir(FileName) = "" Then '文件不存在 FileToDb = 2 Exit Function End If sf = FreeFile Open FileName For Binary Access Read As sf fl = LOF(sf) If fl = 0 Then '0长度文件 Close sf FileToDb = 3 Exit Function End If ColSize.Value = fl ReDim Bindata(fl) Get sf, , Bindata() ColBlob.AppendChunk Bindata() FileToDb = 12 '成功返回12 Close sf End Function Public Function DbToFile(ByVal ColSize As ADODB.Field, ByVal ColBlob As ADODB.Field, ByVal FileName As String) As Integer '本函数将BLOB字段数据传入文件 '入口: 'ColBlob 传值 包含BLOB字段的rdoColumn对象 'FileName传值 数据文件名 '出口: 'FileToDb= '1 不是blob类型数据 '10TEXT型成功返回 '12IMAGE型成功返回 '标准引用: 'DbToFile(rs.rdoColumns("at"), "c:\2.att") Dim sf As Integer Dim Bindata() As Byte Dim txtdata As String fl = ColSize.Value sf = FreeFile Open FileName For Binary Access Write As sf ReDim Bindata(fl) Bindata() = ColBlob.GetChunk(fl) Put sf, , Bindata() DbToFile = 12 '成功返回12 Close sf End Function
ado2.5以上新加了stream技术,实现此功能非常方便。例:Sub recFields(r As Record, l As ListBox, t As TextBox) Dim f As Field Dim s As Stream Set s = New Stream Dim str As String
For Each f In r.Fields l.AddItem f.Name & ": " & f.Value Next t.Text = "" If r!RESOURCE_CONTENTCLASS = "text/plain" Then s.Open r, adModeRead, adOpenStreamFromRecord str = s.ReadText(1) s.Position = 0 If Asc(Mid(str, 1, 1)) = 63 Then '//63 = "?" s.Charset = "ascii" s.Type = adTypeText End If t.Text = s.ReadText(adReadAll) End If End Sub
存: Public Sub save_picture() Dim cnn As New ADODB.Connection, rst As New ADODB.Recordset Dim bit() As Byte dim varPath as string '图片的路径 cnn.open "连接数据库的字符串" sSql = "SELECT * FROM 表 WHERE 关键字='" & 关键值 & "'" '选出要增加或修改图片记录的记录 rst.Open sSql, cnn, adOpenKeyset, adLockOptimistic
If Not (rst.EOF And rst.BOF) Then If VarPath = "" Then ' 然后将字节数组的内容写入数据库即可 rst.Fields("INFO_PICT") = "" rst.UPDATE Else Open VarPath For Binary As #1 ReDim bit(LOF(1)) As Byte Get 1, 1, bit Close 1 ' 然后将字节数组的内容写入数据库即可 rst.Fields("INFO_PICT").AppendChunk bit rst.UPDATE End If End If end sub 取: Public Sub show_picture() Dim REC As Recordset Dim sSql As String Dim I As Integer Set REC = New Recordset Dim bit1() As Byte Dim sa As String sSql = "SELECT * FROM 表 WHERE 关键字 ='" & 关键值 & "'" REC.Open sSql, Conn, adOpenStatic, adLockOptimistic, adCmdText If REC.EOF Or REC.BOF Then Exit Sub Else REC.Movefirst While Not REC.BOF Picture1.Picture = Nothing If REC("INFO_PICT").ActualSize > 0 Then bit1 = REC.Fields("图片").GetChunk(REC("图片").ActualSize) '然后将字节数组的内容拼装成文件即可 Open "c:\1.bmp" For Binary As #1
Put 1, 1, bit1 Close 1 Picture1.Picture = LoadPicture"c:\1.bmp") End If REC.Movenext Wend End If rec.close Set REC = Nothing Exit Sub Err: MsgBox "读取图片出错!", OKOnly, "系统提示" End Sub
'本函数将文件数据传入BLOB字段
'入口:
'ColBlob 传值 包含BLOB字段的rdoColumn对象
'FileName传值 数据文件名
'出口:
'FileToDb=
'1 不是blob类型数据
'2 文件不存在
'3 0长度文件
'10TEXT型成功返回
'12IMAGE型成功返回
'标准引用:
'FileToDb(rs.rdoColumns("at"), "c:\2.att")
Dim sf As Integer
Dim Bindata() As Byte
Dim txtdata As String
If Dir(FileName) = "" Then '文件不存在
FileToDb = 2
Exit Function
End If
sf = FreeFile
Open FileName For Binary Access Read As sf
fl = LOF(sf)
If fl = 0 Then '0长度文件
Close sf
FileToDb = 3
Exit Function
End If
ColSize.Value = fl
ReDim Bindata(fl)
Get sf, , Bindata()
ColBlob.AppendChunk Bindata()
FileToDb = 12 '成功返回12
Close sf
End Function
Public Function DbToFile(ByVal ColSize As ADODB.Field, ByVal ColBlob As ADODB.Field, ByVal FileName As String) As Integer
'本函数将BLOB字段数据传入文件
'入口:
'ColBlob 传值 包含BLOB字段的rdoColumn对象
'FileName传值 数据文件名
'出口:
'FileToDb=
'1 不是blob类型数据
'10TEXT型成功返回
'12IMAGE型成功返回
'标准引用:
'DbToFile(rs.rdoColumns("at"), "c:\2.att")
Dim sf As Integer
Dim Bindata() As Byte
Dim txtdata As String
fl = ColSize.Value
sf = FreeFile
Open FileName For Binary Access Write As sf
ReDim Bindata(fl)
Bindata() = ColBlob.GetChunk(fl)
Put sf, , Bindata()
DbToFile = 12 '成功返回12
Close sf
End Function
Dim f As Field
Dim s As Stream
Set s = New Stream
Dim str As String
For Each f In r.Fields
l.AddItem f.Name & ": " & f.Value
Next
t.Text = ""
If r!RESOURCE_CONTENTCLASS = "text/plain" Then
s.Open r, adModeRead, adOpenStreamFromRecord
str = s.ReadText(1)
s.Position = 0
If Asc(Mid(str, 1, 1)) = 63 Then '//63 = "?"
s.Charset = "ascii"
s.Type = adTypeText
End If
t.Text = s.ReadText(adReadAll)
End If
End Sub
Public Sub save_picture()
Dim cnn As New ADODB.Connection, rst As New ADODB.Recordset
Dim bit() As Byte
dim varPath as string '图片的路径 cnn.open "连接数据库的字符串"
sSql = "SELECT * FROM 表 WHERE 关键字='" & 关键值 & "'"
'选出要增加或修改图片记录的记录
rst.Open sSql, cnn, adOpenKeyset, adLockOptimistic
If Not (rst.EOF And rst.BOF) Then
If VarPath = "" Then
' 然后将字节数组的内容写入数据库即可
rst.Fields("INFO_PICT") = ""
rst.UPDATE
Else
Open VarPath For Binary As #1
ReDim bit(LOF(1)) As Byte
Get 1, 1, bit
Close 1
' 然后将字节数组的内容写入数据库即可
rst.Fields("INFO_PICT").AppendChunk bit
rst.UPDATE
End If
End If
end sub 取:
Public Sub show_picture()
Dim REC As Recordset
Dim sSql As String
Dim I As Integer
Set REC = New Recordset
Dim bit1() As Byte
Dim sa As String
sSql = "SELECT * FROM 表 WHERE 关键字 ='" & 关键值 & "'"
REC.Open sSql, Conn, adOpenStatic, adLockOptimistic, adCmdText
If REC.EOF Or REC.BOF Then
Exit Sub
Else
REC.Movefirst
While Not REC.BOF
Picture1.Picture = Nothing
If REC("INFO_PICT").ActualSize > 0 Then
bit1 = REC.Fields("图片").GetChunk(REC("图片").ActualSize)
'然后将字节数组的内容拼装成文件即可
Open "c:\1.bmp" For Binary As #1
Put 1, 1, bit1
Close 1
Picture1.Picture = LoadPicture"c:\1.bmp")
End If
REC.Movenext
Wend
End If
rec.close
Set REC = Nothing
Exit Sub
Err:
MsgBox "读取图片出错!", OKOnly, "系统提示"
End Sub