我的数据库中有一个字段(Pic)是image类型的,请问如何在VB中显示该字段的图片啊!?

解决方案 »

  1.   

    1.可以直接绑定 2.用GetChunk读出来生成文件再载入。
      

  2.   

    小弟愚昧,可否详细一点呢?GetChunk是何物啊!
      

  3.   

    '以下内容为转摘:使用流对象保存和显示图片 
    打开vb6,新建工程。添加两个按钮,一个image控件
    注意:Access中的photo字段类型为OLE对象.
    SqlServer中的photo字段类型为Image'** 引用 Microsoft ActiveX Data Objects 2.5 Library 及以上版本
    ‘2.5版本以下不支持Stream对象
    Dim iConcstr As String
    Dim iConc As ADODB.Connection
     '保存文件到数据库中
    Sub s_SaveFile()
        Dim iStm As ADODB.Stream
        Dim iRe As ADODB.Recordset
        Dim iConcstr As String    '读取文件到内容
        Set iStm = New ADODB.Stream
        With iStm
            .Type = adTypeBinary   '二进制模式
            .Open
            .LoadFromFile App.Path + "\test.jpg"
        End With
           '打开保存文件的表
        Set iRe = New ADODB.Recordset
        With iRe
            .Open "select * from img", iConc, 1, 3
            .AddNew         '新增一条记录
            .Fields("photo") = iStm.Read
            .Update
        End With
          '完成后关闭对象
        iRe.Close
        iStm.Close
    End Sub
    Sub s_ReadFile()
        Dim iStm As ADODB.Stream
        Dim iRe As ADODB.Recordset
        '打开表
    Set iRe = New ADODB.Recordset
    ‘得到最新添加的纪录
        iRe.Open "select top 1 * from img order by id desc", iConc, adOpenKeyset, adLockReadOnly
        '保存到文件
        Set iStm = New ADODB.Stream
        With iStm
            .Mode = adModeReadWrite
            .Type = adTypeBinary
            .Open
            .Write iRe("photo")
    ‘这里注意了,如果当前目录下存在test1.jpg,会报一个文件写入失败的错误.
            .SaveToFile App.Path & "\test1.jpg"
        End With
           Image1.Picture = LoadPicture(App.Path & "\test1.jpg")
       '关闭对象
        iRe.Close
        iStm.Close
    End Sub
     Private Sub Command1_Click()
    Call s_ReadFile
    End Sub
    Private Sub Command2_Click()
    Call s_SaveFile
    End Sub
    Private Sub Form_Load()
        '数据库连接字符串
        iConcstr = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
            ";Data Source=F:\csdn_vb\database\保存图片\access图片\img.mdb"‘下面的语句是连接sqlserver数据库的.
        ‘iConcstr = "Provider=SQLOLEDB.1;Persist Security Info=True;" & _
    ‘ "User ID=sa;Password=;Initial Catalog=test;Data Source=yang"
        Set iConc = New ADODB.Connection
       iConc.Open iConcstr
    End Sub
     Private Sub Form_Unload(Cancel As Integer)
    iConc.Close
    Set iConc = Nothing
    End Sub
      

  4.   

    也可以用下面函数Public Function ReadbolbToFile(blobColumn As ADODB.Field, ByVal FileName) As Boolean
    Dim FileNumber      As Integer      '文件号
    Dim DataLen             As Long         '文件长度
    Dim Chunks              As Long         '数据块数
    Dim ChunkAry()      As Byte         '数据块数组
    Dim ChunkSize       As Long         '数据块大小
    Dim Fragment        As Long         '零碎数据大小
    Dim lngI                As Long '计数器
        
            On Error GoTo ErrorHandle
            ReadbolbToFile = False
            ChunkSize = 2048                    '定义块大小为 2K
           'If IsNull(blobColumn) Then Exit Function
        
            DataLen = blobColumn.ActualSize         '获得图像大小
            If DataLen < 8 Then Exit Function   '图像大小小于8字节时认为不是图像信息
                FileNumber = FreeFile               '产生随机的文件号
            Open FileName For Binary Access Write As FileNumber     '打开存放图像数据文件
            Chunks = DataLen \ ChunkSize        '数据块数
            Fragment = DataLen Mod ChunkSize    '零碎数据
            
        
            ReDim ChunkAry(ChunkSize - 1)             '为数据块重新开辟空间
            For lngI = 1 To Chunks                              '循环读出所有块
                    ChunkAry = blobColumn.GetChunk(ChunkSize)   '在数据库中连续读数据块
                    Put FileNumber, , ChunkAry()    '将数据块写入文件中
            Next lngI
            
            If Fragment > 0 Then            '有零碎数据,则先读该数据
                    ReDim ChunkAry(Fragment - 1)
                    ChunkAry = blobColumn.GetChunk(Fragment)
                    Put FileNumber, , ChunkAry      '写入文件
            End If
            
            Close FileNumber            '关闭文件
            ReadbolbToFile = True
            Exit Function
    ErrorHandle:
            ReadbolbToFile = False
            MsgBox Err.Description, vbCritical, "读图像数据出错!"
    End Function