1、现在需要把某一扩展名的文件存到数据库中,要求通过将文件转换成二进制文件写入数据库,不许通过记录文件路径的方式保存。(数据库为SQL)
2、存入数据库中后如何把二进制文件给还原出来生成原来类型的文件?
3、存文件的字段用哪一种数据类型?我用的是nText
如:我把1.doc文件整个存到字段FileContent,文件类型doc存到FileType,
    还原时根据FileType将FileContent中的内容还原成**.doc文件。

解决方案 »

  1.   

    存文件的字段类弄应该使用 Binary 类型ADO 的 Recordset 有对二进制数据流读写的方法Public Sub WriteDB(rst As Recordset);
        Dim F    As Integer
        Dim fld  As Field
        Dim bt() As Byte
        
        F = FreeFile()
        Set fld = rst.Fields("FileContent")
        Open "c:\1.doc" For Binary As #F
        Get #F, , bt
        fld.AppendChunk (bt)
        Close #F
    End Sub读取的时候使用 Field 的  GetChunk 方法就可以了
      

  2.   

    如果是Binary 类型最大只能存8K的文件,而我的文件基本都是8K以上的
      

  3.   

    AppendChunk,既然叫Append,就是可以不断加的意思,分段读取,然后循款调用AppendChunk就可以
      

  4.   

    AppendChunk 和 GetChunk 方法范例
    该范例使用 AppendChunk 和 GetChunk 方法用其他记录中的数据填写图像字段。Public Sub AppendChunkX()   Dim cnn1 As ADODB.Connection
       Dim rstPubInfo As ADODB.Recordset
       Dim strCnn As String
       Dim strPubID As String
       Dim strPRInfo As String
       Dim lngOffset As Long
       Dim lngLogoSize As Long
       Dim varLogo As Variant
       Dim varChunk As Variant
       
       Const conChunkSize = 100   ' 打开连接。
       Set cnn1 = New ADODB.Connection
          strCnn = "Provider=sqloledb;" & _
          "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
       cnn1.Open strCnn
       
       ' 打开 pub_info 表。
       Set rstPubInfo = New ADODB.Recordset
       rstPubInfo.CursorType = adOpenKeyset
       rstPubInfo.LockType = adLockOptimistic
       rstPubInfo.Open "pub_info", cnn1, , , adCmdTable
       
       ' 提示复制徽标。
       strMsg = "Available logos are : " & vbCr & vbCr
       Do While Not rstPubInfo.EOF
          strMsg = strMsg & rstPubInfo!pub_id & vbCr & _
             Left(rstPubInfo!pr_info, InStr(rstPubInfo!pr_info, ",") - 1) & _
             vbCr & vbCr
          rstPubInfo.MoveNext
       Loop
       strMsg = strMsg & "Enter the ID of a logo to copy:"
       strPubID = InputBox(strMsg)
       
       ' 将徽标大块复制到变量中。
       rstPubInfo.Filter = "pub_id = '" & strPubID & "'"
       lngLogoSize = rstPubInfo!logo.ActualSize
       Do While lngOffset < lngLogoSize
          varChunk = rstPubInfo!logo.GetChunk(conChunkSize)
          varLogo = varLogo & varChunk
          lngOffset = lngOffset + conChunkSize
       Loop
       
       ' 从用户处得到数据。
       strPubID = Trim(InputBox("Enter a new pub ID:"))
       strPRInfo = Trim(InputBox("Enter descriptive text:"))
       
       ' 添加新记录,大块复制徽标。
       rstPubInfo.AddNew
       rstPubInfo!pub_id = strPubID
       rstPubInfo!pr_info = strPRInfo   lngOffset = 0 ' 重置位移。
       Do While lngOffset < lngLogoSize
          varChunk = LeftB(RightB(varLogo, lngLogoSize - lngOffset), _
             conChunkSize)
          rstPubInfo!logo.AppendChunk varChunk
          lngOffset = lngOffset + conChunkSize
       Loop
       rstPubInfo.Update
       
        ' 显示新添加的数据。
       MsgBox "New record: " & rstPubInfo!pub_id & vbCr & _
          "Description: " & rstPubInfo!pr_info & vbCr & _
          "Logo size: " & rstPubInfo!logo.ActualSize   ' 删除新记录,因为这只是演示。
       rstPubInfo.Requery
       cnn1.Execute "DELETE FROM pub_info " & _
          "WHERE pub_id = '" & strPubID & "'"   rstPubInfo.Close
       cnn1.Close   End Sub