将图片存入sql中吗?Private Sub SavePhoto(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

解决方案 »

  1.   

    使用:
     SavePhoto Rs.Fields("photo"), strPath
      

  2.   

    至于读取图片只需将图片字段与图片控件绑订即可。
        Set picTmp.DataSource = Rs
        picTmp.DataField = "photo"
    picTmp是picture box控件
      

  3.   

    '二进制数据转换为文件形式
    'sfilename为一临时文件名。
    Public Function BinarytoFile(sFileName As String, fld As ADODB.Field) As Variant
        Dim bBuffer() As Byte
        Dim nLenLeft As Long
        Dim nChunkSize As Long
        Dim FileNO As Long
        If Len(Dir$(sFileName)) > 0 Then
            Close
            Kill sFileName
        End If
        FileNO = FreeFile
        Open sFileName For Binary As #FileNO
        nChunkSize = 32768
        nLenLeft = fld.ActualSize
        If nLenLeft = 0 Then
            BinarytoFile = Empty
            Exit Function
        End If
        If nLenLeft < nChunkSize Then
            nChunkSize = nLenLeft
        End If
        Do
            ReDim bBuffer(nChunkSize - 1)
            bBuffer = fld.GetChunk(nChunkSize)
            Put #FileNO, , bBuffer
            nLenLeft = nLenLeft - nChunkSize
            If nLenLeft < nChunkSize Then
                nChunkSize = nLenLeft
            End If
        Loop Until nLenLeft <= 0
        Close #FileNO
        BinarytoFile = sFileName
    End Function'图形转换成二进制文件。
    Public Function FileIoBinary(strfile As String) As Variant
        
        If strfile = "" Then
            FileIoBinary = Empty
            Exit Function
        End If
        Open strfile For Binary As #1
        ReDim Binfile(FileLen(strfile) - 1)
        Get #1, , Binfile
        Close #1
        FileIoBinary = Binfile
    '    MsgBox UBound(Binfile)
    End Function
    '例如:
    Image1.Picture = LoadPicture(IIf(IsEmpty(Rsgz("photo")), Empty, BinarytoFile("bmptemp", Rsgz("photo"))))
    数据库中“photo”为存储图像字段,好象是image类型。
    添加时采用addnew 或
    RsPhoto.Fields("photo").AppendChunk FTPhoto
    FTPhoto为二进制数据文件。
      

  4.   

    你用STREAM对象吧!ADO的,我以前也发过这个类似的贴子,你找找吧,很少的代码,不多于10行的样子,方便得很,当时好像是白菜给我回的!呵呵!
      

  5.   

    收藏好!
    ================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★  浏览帖子速度极快![建议系统使用ie5.5以上]。 ★  多种帖子实现界面。 
    ★  保存帖子到本地[html格式]★  监视您关注帖子的回复更新。
    ★  可以直接发贴、回复帖子★  采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录! 
    ★  支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名  ●  
         可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zip
    Http://www.ChinaOK.net/csdn/csdn.rar
    Http://www.ChinaOK.net/csdn/csdn.exe    [自解压]
      

  6.   

    来自msdn的例子在 ActiveX Data Objects (ADO) 2.5 中引入的 Stream 对象可以用来大大简化编写访问和修改 SQL Server 中的 BLOB 数据的代码。 以前版本的 ADO [ 2.0、2.1 和 2.1 SP2 ] 则需要小心使用 Field 对象的 GetChunk 和 AppendChunk 方法,才能将固定大小的大型数据块中的 BLOB 数据写入 BLOB 列(或从中读取)。 由于 ADO 2.5 的出现,该方法有了可以替代的方案。 本文包含相应的代码示例,这些示例演示了如何使用 Stream 对象来为如下常见任务进行编程: 将存储在 SQL Server Image 列的数据保存到硬盘的文件中。 
    将 .gif 文件的内容移到 SQL Server 表的 Image 列。 更多信息
    下面的代码示例所针对的数据存储在 SQL Server 7.0 pubs 示例数据库的 pub_info 表中。 您需要修改 ADO 连接字符串,使之指向您安装的 SQL Server。 示例 1: 将 SQL Server Image 列中的数据保存到硬盘文件中 
    该示例代码将打开在 pubs 数据库的 pub_info 表中的记录集,并将存储在第一条记录 logo 列中的二进制图像数据保存到硬盘文件中,如下所示: 
    新建一个标准 EXE Visual Basic 工程。 
    在工程菜单上,单击选择引用,然后设置一个到 Microsoft ActiveX Data Objects 2.5 Object Library 的引用。 
    将 CommandButton 控件放在 Form1 上。 
    在该窗体的常规声明段中作如下声明: 
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim mstream As ADODB.Stream 
    将下面的代码剪切并粘贴到添加到该窗体的 CommandButton 所对应的 Click 事件中: 
    Set cn = New ADODB.Connection
    cn.Open "Provider=SQLOLEDB;data Source=<name of your SQL Server>;
    Initial Catalog=pubs;User Id=<Your Userid>;Password=<Your Password>"Set rs = New ADODB.Recordset
    rs.Open "Select * from pub_info", cn, adOpenKeyset, adLockOptimisticSet mstream = New ADODB.Stream
    mstream.Type = adTypeBinary
    mstream.Open
    mstream.Write rs.Fields("logo").Value
    mstream.SaveToFile "c:\publogo.gif", adSaveCreateOverWriters.Close
    cn.Close 
    保存并运行该 Visual Basic 工程。 
    单击 CommandButton,即可将第一条记录的 logo 列所包含的二进制数据保存到文件 c:\publogo.gid 中。请用资源管理器找到并打开该文件,以查看所保存的图像。 该示例中的代码声明了一个 ADODB Stream 对象,并将它的 Type 属性设置为 adTypeBinary,以表示将使用该对象处理二进制数据。 然后,通过调用 Stream 对象的 Write 方法,存储在 pub_info 表第一条记录的 logo 列中的数据被写出到 Stream 对象中。 现在,Stream 对象包含了二进制数据,该二进制数据是通过调用该对象的 SaveToFile 方法并传入文件的路径保存到文件中的。 作为第二个参数被传入的常量 adSaveCreateOverWrite 则导致 SaveToFile 方法覆盖指定的文件(如果它已经存在)。 
    示例 2: 将以 .gif 文件格式存储的图像传输到 SQL Server 表的 Image 列 
    该示例代码将通过覆盖 pub_info 表的当前内容,将一个以 .gif 文件格式存储的图像保存到该表的第一条记录中,如下所示: 
    新建一个标准 EXE Visual Basic 工程。 
    在工程菜单上,单击选择引用,然后设置一个到 Microsoft ActiveX Data Objects 2.5 Object Library 的引用。 
    将 CommandButton 按钮放在 Form1 上。 
    在该窗体的常规声明段中作如下声明: 
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim mstream As ADODB.Stream 
    将下面的代码剪切并粘贴到添加到该窗体的 CommandButton 所对应的 Click 事件中: 
    Set cn = New ADODB.Connection
    cn.Open "Provider=SQLOLEDB;data Source=<name of your SQL Server>;
    Initial Catalog=pubs;User Id=<Your Userid>;Password=<Your Password>"Set rs = New ADODB.Recordset
    rs.Open "Select * from pub_info", cn, adOpenKeyset, adLockOptimisticSet mstream = New ADODB.Stream
    mstream.Type = adTypeBinary
    mstream.Open
    mstream.LoadFromFile "<path to .gif file>"
    rs.Fields("logo").Value = mstream.Read
    rs.Updaters.Close
    cn.Close 
    保存并运行该 Visual Basic 工程。 
    单击 CommandButton 运行该代码,即可将 .gif 文件的内容以数据流的方式传输到 ADO Stream 对象中,并将 Stream 中的数据保存到记录集内第一条记录的 logo 列。 
    请使用示例 1 中的代码,确认 logo 列中的图像已被修改。 
      

  7.   

    存:
    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("图片") = ""
                rst.UPDATE
           Else
                Open VarPath For Binary As #1
                ReDim bit(LOF(1)) As Byte
                Get 1, 1, bit
                Close 1
             '    然后将字节数组的内容写入数据库即可
                rst.Fields("图片").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
                Picture1.Picture = Nothing
                If REC("图片").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")  
                    kill ("c:\1.bmp")              End If
         End If
        rec.close
        Set REC = Nothing
    Exit Sub
    Err:
       MsgBox "读取图片出错!", OKOnly, "系统提示"
    End Sub