也可用ADODC控件和PICTURE控件绑定

解决方案 »

  1.   

    下面有一段存、取图片的例子,你可以照着试一下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
      

  2.   

    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
      

  3.   

    存:
    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