ACCESS数据库:不用鼠标右键插入图片,直接保存图片,而不是保存二进制流。要求:按[插入]按钮,可以在硬盘或网络上寻找图片文件,找到文件后按[确定]按钮,图片就插入数据库中。问:
1。是否能够做到上述要求?
2。如何做到。能提供示范代码吗?或何处可以下载示范代码

解决方案 »

  1.   

    数据库中存图片的字段是image 类型,往数据库中保存和从数据库中取出时,肯定是要经过二进制流的处理。
      

  2.   

    部分代码:
    Public Const BColor As Long = 13473132  'シエRGB(108, 149, 205)Public Sub SavePicToDB(fileName As String, fld As ADODB.Field)
        Dim nLenLeft As Long
        Dim nChunkSize As Long
        Dim mPicFile As Scripting.File
        Dim mFileBuffer() As Byte
        Dim varChunk As Variant
        Dim lFso As New FileSystemObject
        
        Const ConChunkSize = 32768
        If fld.Type <> adLongVarBinary Then
          MsgBox "&#65400;&#65411;&#65431;&#65430;&#65398;&#65422;&#65394;&#65403;&#65418;&#65415;&#65427;&#65411;&#65408;&#65396;&#65396;豢&#65378;&#65421;&#65404;&#65424;&#65422;&#65379;&#65388;&#65415;&#12539;&#12539;&#12539;", vbCritical, "&#65414;&#65381;&#65413;莇﨔&#12539;"
          Exit Sub
        End If
        If Not lFso.FileExists(fileName) Then
           MsgBox "&#65394;&#65403;&#65396;贇&#65434;&#65400;&#65411;&#65422;&#65412;&#65404;&#63730;&#65379;&#65377;", vbCritical, "&#65422;&#65412;&#65404;&#63730;&#65396;﨔&#12539;"
           '
           Exit Sub
        End If
        Set mPicFile = lFso.GetFile(fileName)
        nChunkSize = mPicFile.Size
        ReDim mFileBuffer(nChunkSize - 1)
        
        Open fileName For Binary As #1
        
        Get #1, , mFileBuffer
         
         nLenLeft = 0  ' &#65430;&#65432;&#65430;&#65411;&#65422;&#65403;&#65426;&#65414;&#65377;&#65379;
          Do While nLenLeft < nChunkSize
             varChunk = LeftB(RightB(mFileBuffer, nChunkSize - nLenLeft), ConChunkSize)
             fld.AppendChunk varChunk
             nLenLeft = nLenLeft + ConChunkSize
         Loop
         Close #1End Sub
      

  3.   

    接上面的:
    Public Sub SaveDBToPicFile(sFileName As String, fld As ADODB.Field)
        Dim bBuffer() As Byte
        Dim nLenLeft As Long
        Dim nChunkSize As Long
        
        '
        If fld.ActualSize = 0 Then Exit Sub
        
        Open sFileName For Binary Access Write As #2
        
        nChunkSize = 32768
        nLenLeft = fld.ActualSize
        
        
        If nLenLeft < nChunkSize Then
          nChunkSize = nLenLeft
        End If
        
        Do
          ReDim bBuffer(nChunkSize - 1)
          bBuffer = fld.GetChunk(nChunkSize)
          
          nLenLeft = nLenLeft - nChunkSize
          If nLenLeft < nChunkSize Then
            nChunkSize = nLenLeft
          End If      Put #2, , bBuffer
        Loop Until nLenLeft <= 0
     
        Close #2 End Sub
      

  4.   

    数据库中存图片的字段是image 类型,往数据库中保存和从数据库中取出时,肯定是要经过二进制流的处理。
    --- 真的不能直接保存图片码?(就像用鼠标右键插入图片那样产生的直接保存图片的效果。)
      

  5.   

    设一个OLE字段,然后插入对象就行了(对着字段单击右键)。但是要注意的是,用上述方法加入数据库的图片只能以手动方式保存,需要用程序读取的时候会碰到存储在ole字段中二进制数据与源文件不符的情况。主要是因为ole引擎在图片的前面加了一段信息给他自己用。
    请参考:
    http://access911.net/index.asp?board=4&mode=3&recordid=75FAB21E12DC