1、注:我已引用了Microsoft ActiveX Data Objects 2.5 Library 
    我的数据库里每条纪录都有一幅图片。在新增记录的代码如下:
   rs.AddNew
       rs.Fields(“name").Value = Text1.Text
       rs.Fields("photo")= Image1.Picture  ‘就是这里不对,大虾看看怎么改
   rs.Update   读取数据也是怎么样读出图片啊,我用其他方法把图片存为长二制文件,
Dim sqlstr As String
sqlstr = "select * from emplist where 公司型号= '" & Text13.Text & "'"
If Cn = True Then
If ExeReturn(sqlstr, rst) = True Then
   text1.text=rs.fields("name").value
   image1.picture=loadpicture(rs.fields("photo")) 就是这里不对,大虾看看怎么改
2、如果在数据库里面保存图片的路径,那么在VB中怎么把路径显示成图片?
3、如果用了Stream Dim PicStm As ADODB.Stream  然后怎么用啊,最好有注释,
   谢谢大家了,分不够再加,如果问题能解决,我可以把我的全部分给完,
   QQ:37219328  E-mail:[email protected]
   谢谢大家了!

解决方案 »

  1.   

    '保存图片到数据库
    Private Sub Command17_Click()
    Dim db As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim StmPic As ADODB.Stream
    db.ConnectionString = "provider=microsoft.jet.oledb.4.0;" & "data source=" & App.Path & "\dev.mdb"
    db.Open    Set StmPic = New ADODB.Stream
        StmPic.Type = adTypeBinary    '指定流是二进制类型
        StmPic.Open                     '将数据获取到Stream对象中
        StmPic.LoadFromFile ("f:\aa.jpg") '将选择的图像加载到打开的StmPic中
        rs.Open "Photo", db, adOpenDynamic, adLockOptimistic
        rs.AddNew
        rs!photo = StmPic.Read   '从StmPic对象中读取数据
        rs.Update
        StmPic.Close
        MsgBox "保存到数据库成功!"
    End Sub'取出图片.
    Private Sub Command18_Click()
    Dim db As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim StmPic As ADODB.Stream
    Dim StrPicTemp As String
    db.ConnectionString = "provider=microsoft.jet.oledb.4.0;" & "data source=" & App.Path & "\dev.mdb"
    db.OpenSet StmPic = New ADODB.Stream
    StmPic.Type = adTypeBinary
    StmPic.Open
    rs.Open "select * from photo where id=1", db
    StmPic.Write rs!photo      '写入数据库中的数据至Stream中
    StmPic.SaveToFile App.Path & "\photo\temp.tmp", adSaveCreateOverWrite
    StmPic.Close
    rs.Close
    Picture1.Picture = LoadPicture(App.Path & "\photo\temp.tmp")
    End Sub
      

  2.   

    一般来说数据库中图片都只存取图片的路径,那么相对而言就比较简单。
    显示图片:
    picture1.picture=loadpicture(""& rs!photo &"")
    即可。
      

  3.   

    rs.Fields("photo")= Image1.Picture
    这句错啦!!!记录集怎么能直接存取图片呢?呵呵
    要用ADODB.Stream  ,关于用法楼上的已经讲的很详细了呵呵
      

  4.   

    支持tztz520(午夜逛街) ( )
      

  5.   

    tztz520(午夜逛街) 你没有联系方式,我照你的方法,可以把图片存进去,存进去是“长二进制数据”,我现在想把他在VB中显示出来,picture1.picture=loadpicture(rs.fields("photo"))这样不行,照你那样写LoadPicture(App.Path & "\photo\temp.tmp")我有点不明白,直接读“长二进制数据”读不出来吗?怎么样才可以读出来!谢谢你了
      

  6.   

    直接读出来的是一个文件流,不能用loadpicture函数显示.要先保存成一个临时文件,再将那个临时文件显示到picture1中.显示完后你可以用kill App.Path & "\photo\temp.tmp来删除这个临时文件.
      

  7.   

    Dim Constr As String ′ODBC路径
      Dim FileName As String ′图片文件名
      Const BLOCKSIZE = 4096 ′每次读写块的大小
      Dim ADOCon As New ADODB.Connection ′ADODB Connection对象
      Dim ADORst As New ADODB.Recordset ′ADODB Recordset 对象
      Dim ADOFld As ADODB.Field ′ADODB Field 对象
    ------------------------
      Private Sub SaveToDB(ByRef Fld As ADODB.Field, DiskFile As String)
      Dim byteData() As Byte ′定义数据块数组
      Dim NumBlocks As Long ′定义数据块个数
      Dim FileLength As Long ′标识文件长度
      Dim LeftOver As Long′定义剩余字节长度
      Dim SourceFile As Long ′定义自由文件号
      Dim i As Long ′定义循环变量
      SourceFile = FreeFile ′提供一个尚未使用的文件号
      Open DiskFile For Binary Access Read As SourceFile ′打开文件
      FileLength = LOF(SourceFile) ′得到文件长度
      If FileLength = 0 Then ′判断文件是否存在
      Close SourceFile
      MsgBox DiskFile & ″ 无 内 容 或 不 存 在 !″
      Else
      NumBlocks = FileLength \ BLOCKSIZE ′得到数据块的个数
      LeftOver = FileLength Mod BLOCKSIZE ′得到剩余字节数
      Fld.Value = Null
      ReDim byteData(BLOCKSIZE) ′重新定义数据块的大小
      For i = 1 To NumBlocks
      Get SourceFile, , byteData() ′ 读到内存块中
      Fld.AppendChunk byteData() ′写入FLD
      Next i
      ReDim byteData(LeftOver) ′重新定义数据块的大小
      Get SourceFile, , byteData() ′读到内存块中
      Fld.AppendChunk byteData() ′写入FLD
      Close SourceFile ′关闭源文件
      End If
      End Sub
       ----------------------
      Private Sub Form_Load()
       Constr = ″DSN=image″ ′定义ODBC连接
       ADOCon.Open Constr ′创建一个连接
       ADORst.Open ″table″, ADOCon, adOpenDynamic, adLockOptimistic
      ′打开一个ADO动态集 表名为table
       Set AdoCtr.Recordset = ADORst ′将动态集赋给ADO控件
      End Sub
          ----------------------
     Private Sub Form_Unload(Cancel As Integer)
      ′记得关闭打开的数据集,释放资源
      ADORst.Close
      ADOCon.Close
      Set ADORst = Nothing
      Set ADOCon = Nothing
     End Sub
          ---------------------- Private Sub PreView_Click()
      ′显示打开文件的公用对话框,选择需要加入数据库的图片
      CDlg.Filter = ″位图(*.bmp)|*.bmp″
      CDlg.ShowOpen
      FileName = CDlg.FileName
      PicBox.Picture = LoadPicture(FileName) ′预览图片
     End Sub
          ---------------------- Private Sub Save_Click()
      ADORst.AddNew ′新增纪录
      ADORst(″姓名″).Value = Names.Text ′给动态集的第一个字段赋值
      ADORst(″编号″).Value = Numb.Text ′给动态集的第二个字段赋值
      Set ADOFld = ADORst(″照片″) ′给ADODB.Field对象赋值
      Call SaveToDB(ADOFld, FileName) 
      ′调用子程序,给第三个字段(image)赋值
      ADORst.Update
     End Sub
          ---------------------- Private Sub Update_Click()
      ′重新打开纪录集,刷新纪录
      ADORst.Close
      ADOCon.Close
      Set ADORst = Nothing
      Set ADOCon = Nothing
      ADOCon.Open Constr
      ADORst.Open ″table″, ADOCon, adOpenDynamic, adLockOptimistic
      Set AdoCtr.Recordset = ADORst
     End Sub