[求助]VB 显示图片??急通过二进制方式从access中读出一图片(jpg),在picturebox loadpicture时 出现错误 “无效图片”,不知那位大虾给以指点??代码如下:
'读取:
  Dim rs     As New ADODB.Recordset
  Dim Rss     As New ADODB.Stream
  Dim cnn     As ADODB.Connection
  Dim cnstr     As String
  cnstr = "rovider=Microsoft.Jet.OLEDB.4.0;Data   Source=" + App.Path + "\纸牌.mdb;Mode=ReadWriteersist   Security   Info=False"
  Set cnn = New ADODB.Connection
  'cnn.Open cnstr
  cnn.Open "rovider=Microsoft.Jet.OLEDB.4.0;Data Source=" + App.Path + "\纸牌.mdb"
  rs.Open "test", cnn, adOpenStatic, adLockOptimistic
  Rss.Type = adTypeBinary
  Rss.Open
  If Not rs.EOF Then
          Rss.Write rs.Fields("a2")
          Rss.SaveToFile App.Path & "\tmp.jpg"           '存为硬盘文件
          Picture1.Picture = LoadPicture(App.Path & "\tmp.jpg")                  出现错误,“无效图片” runtime error'481'
          Kill App.Path & "\tmp.jpg"
  End If
  rs.Close
  cnn.Close

解决方案 »

  1.   

    你打开tmp.jpg看看是图片吗?不是的话就可能是数据库中的二进制数据有问题,或是保存文件代码不对。试试这个:'-----------------------------------------------------------
    '从数据库中读取长二进制数据并写入到图像文件中
    '--Stanley  2007/05/18
    '-----------------------------------------------------------
    Public Function ReadDBToFile(Fld As ADODB.Field, DiskFile As String) 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
        
        ReadDBToFile = False
        ChunkSize = 2048 '定义块大小为 2K
        DataLen = Fld.ActualSize '获得图像大小
        If DataLen < 8 Then Exit Function '图像大小小于8字节时认为不是图像信息
        
        FileNumber = FreeFile '产生随机的文件号
        Open DiskFile For Binary Access Write As FileNumber '打开存放图像数据文件
        Chunks = DataLen \ ChunkSize '数据块数
        Fragment = DataLen Mod ChunkSize '零碎数据
        ReDim ChunkAry(ChunkSize - 1) '为数据块重新开辟空间
        For lngI = 1 To Chunks '循环读出所有块
            ChunkAry = Fld.GetChunk(ChunkSize) '在数据库中连续读数据块
            Put FileNumber, , ChunkAry() '将数据块写入文件中
        Next lngI
        If Fragment > 0 Then '有零碎数据,则先读该数据
            ReDim ChunkAry(Fragment - 1)
            ChunkAry = Fld.GetChunk(Fragment)
            Put FileNumber, , ChunkAry '写入文件
        End If
        Close FileNumber '关闭文件
        
        ReadDBToFile = True
        Exit Function
    ErrorHandle:
        ReadDBToFile = False
        MsgBox Err.Description, vbOKOnly + vbCritical, "读图像数据出错!"
    End Function