如何Image控件绑定Access2000数据库中的图片?Access97的可以绑定,但是2000的就不行了(用ADODC)

解决方案 »

  1.   


       用绑定的方法我没有试过.给你一段代码试试看:'/以流放问数据库中的二进制字段时的读/写标志
    Public Enum SmRsType
           RsWrite = 1
           RsRead = 2
    End Enum
    '
    '读写二进制数据(流)
    '函数名:AdoStream
    '参数:  M_Conn ADODB连接,TabName 目标数据表,FldName 目标字段,WhereStr 更新条件,
    '       FileName 源文件名或由流生成的文件名,RsStyle 记录集的操作类型.W:File to Recode,R:Recode to File
    '返回值:
    '例:    CALL  AdoStream(P_Cnn,"AchGoods","GdsPhoto","Where gdsid='001'","C:\Tmp.Bmp","W")Public Function AdoStream(M_Conn As ADODB.Connection, _
                              TabName As String, _
                              FldName As String, _
                              Optional WhereStr As String = "", _
                              Optional Filename As String, _
                              Optional RsStyle As SmRsType = RsWrite) As String
        
        Dim StrSql As String
        Dim TmpFileName As String
        Dim Rs As New ADODB.Recordset
        Dim AdoSem As New ADODB.Stream
        Dim ReturnVal As String
        Dim WorkPath As String
        Dim RsType  As Long
        Dim RsStyleStr As String
        
        On Error Resume Next
        
        WorkPath = App.Path
        If Right$(WorkPath, 1) <> "\" Then WorkPath = WorkPath & "\"
        ReturnVal = ""
        AdoSem.Type = adTypeBinary    '流数据类型
        AdoSem.Open                  '打开流
    '/-----------------------------------------------------------
        '将流写入记录集
        RsType = RsStyle
        RsStyleStr = Choose(RsType, "W", "R")
        If RsStyleStr = "W" Then
            If Left$(Trim$(UCase$(WhereStr)), Len("where")) <> UCase$("where") Then WhereStr = " Where " & Trim$(WhereStr)
            StrSql = "Select Top 1 [" & TabName & "].[" & FldName & "] From [" & TabName & "] " & WhereStr
            Set Rs = RsOpen(M_Conn, StrSql, False)  '连接式记录集
            If Not (Rs.EOF And Rs.BOF) Then
                Rs.MoveFirst
                AdoSem.LoadFromFile Filename            '将文件LOAD到流
                DoEvents
                Rs.Fields(FldName).AppendChunk AdoSem.Read
                Rs.Update
            End If
            AdoStream = ""
        ElseIf RsStyle = "R" Then
            '/将流从记录集中取出
            If Len(Trim$(Filename)) = 0 Then Filename = "TmpFile.Bmp"
            If Len(Trim$(Dir$(TmpFileName, vbNormal + vbHidden))) > 0 Then Kill Filename
            If Left$(Trim$(UCase$(WhereStr)), Len("where")) <> UCase$("where") Then WhereStr = " Where " & Trim$(WhereStr)
            
            StrSql = "Select Top 1 [" & TabName & "].[" & FldName & "] From [" & TabName & "] " & WhereStr
            Set Rs = RsOpen(M_Conn, StrSql)
            If Not (Rs.EOF And Rs.BOF) Then
                Rs.MoveFirst
                If Not (IsNull(Rs.Fields(FldName))) Then
                    TmpFileName = WorkPath & Filename
                    AdoSem.Write Rs.Fields(FldName).GetChunk(Rs.Fields(FldName).ActualSize)
                    DoEvents
                    AdoSem.SaveToFile TmpFileName, IIf(Len(Trim$(Dir$(TmpFileName, vbNormal + vbHidden))) > 0, adSaveCreateOverWrite, adSaveCreateNotExist)
                    AdoStream = TmpFileName
                Else
                    AdoStream = ""
                End If
            Else
                AdoStream = ""
            End If
        End If
        AdoSem.Close: Set AdoSem = Nothing
        Rs.Close: Set Rs = Nothing
        Err.Clear
    End Function
      

  2.   

    用DAO控件必须用OLE控件绑定,但在ACCESS中要用插入对象的方法将图片插入到数据表的OLE字段中;如果用ADO控件必须用IMAGE或PICTUREBOX控件绑定,此时数据表的OLE字段必须用AppendChunk的方法写入图片的二进制流。