选中表中的某一行数据,点击一个按钮,就能够打开这个长二进制文件了
我想把它先提取出来,再用提示符打开
我只想到方法,但是写不出来,帮帮忙

解决方案 »

  1.   

    定义一个Byte的数组,用 Rst!字段 赋值就可以了。
    如果里面保存的是图片,是不是还要显示出来呢?
      

  2.   

    存放文件图片 通常word rar mp3 图片之类的文件 把它打开,就像平时打开文件的方式打开
      

  3.   

    本帖最后由 bcrun 于 2011-02-20 18:47:32 编辑
      

  4.   

    使用Stream对象
    参考一下这个例子:
    http://download.csdn.net/source/1467817
      

  5.   

    http://topic.csdn.net/u/20080324/18/b714c98d-95c0-4fc9-a3ec-7cbd33b6f8e9.html
      

  6.   

    把2进制数据存成本地文件,在调用相关的程序打开
    下面是我程序中用到的代码,不过我保存的是Sql数据库,希望对你有用
    -----------------------------------------------------
    表结构
    二进制文件包 BinFilePack sysid 系统ID INT IDENTITY 4 NO 
    二进制文件包 BinFilePack XM_CODEID 项目编号 VARCHAR 32 YES
    二进制文件包 BinFilePack FileNo 文件号 VARCHAR 32 NO 
    二进制文件包 BinFilePack FileName 文件名称 VARCHAR 50 NO 
    二进制文件包 BinFilePack FileExpName 扩展名 VARCHAR 10 NO 
    二进制文件包 BinFilePack FileMemo 块内容 IMAGE 2147483647 YES
    二进制文件包 BinFilePack FileBlockSize 块大小 INT 4 YES
    二进制文件包 BinFilePack FileDate 上传日期 DATETIME 16 NO 
    二进制文件包 BinFilePack FileID 文件块顺序 INT 4 NO 
    ---------------------------------------------------
    Public Sub SaveBinFile(AFNo As String, ACD As CommonDialog)
    'AFNo 文件号,ACD 文件对话框实例
    'AFName 文件名, AFEName 扩展名, AFPName 全路径文件名称
    '将选定的《文件》分解为100K以内的文件块,写入BinFilePack表Dim AFName, AFEName, AFPName As StringDim FileNum As Integer  '自由文件号
    Dim Chunk() As Byte     '二进制数组
    Dim I As Integer        '文件块IDDim OrsPp As New ADODB.RecordsetAFName = ACD.FileTitle
    AFEName = UCase(Right(AFName, 3))
    AFPName = ACD.FilenameIf AFPName <> "" Then    '删除原旧版本文件
        'Con1.Execute "delete from BinFilePack where FileNo='" & AFNo & "'"
        
        '追加新版本文件
        OrsPp.Open "select * from BinFilePack Where FileNo='" & AFNo & "'  And XM_CodeID='" & XM_CODEID & "'", Con1, adOpenDynamic, adLockOptimistic
        
        FileNum = FreeFile      '得到自由文件号
        
        Open AFPName For Binary Access Read As FileNum
        
        ReDim Chunk(LOF(FileNum) Mod 100000)
        Get FileNum, , Chunk()
        
        OrsPp.AddNew
        OrsPp!FileID = 1
        OrsPp!FileNo = AFNo
        OrsPp!Filename = AFName
        OrsPp!FileExpName = AFEName
        OrsPp!XM_CODEID = XM_CODEID
        OrsPp!FileBlockSize = LOF(FileNum) Mod 100000
        OrsPp!FileDate = Left(Date, 10)
        OrsPp!FileMemo.AppendChunk Chunk()
        OrsPp.Update
        
        If LOF(FileNum) > 100000 Then
            ReDim Chunk(100000)
            For I = 1 To Int(LOF(FileNum) / 100000)
                Get FileNum, , Chunk()
                OrsPp.AddNew
                    OrsPp!FileID = I + 1
                    OrsPp!FileNo = AFNo
                    OrsPp!XM_CODEID = XM_CODEID
                    OrsPp!Filename = AFName
                    OrsPp!FileExpName = AFEName
                    OrsPp!FileBlockSize = 100000
                    OrsPp!FileDate = Left(Date, 10)
                    OrsPp!FileMemo.AppendChunk Chunk()
                OrsPp.Update
            Next I
        End If
        
        OrsPp.Close
        
        If I = 0 Then I = 1
        MsgBox AFPName & " 文件安装完成,文件大小为  " & LOF(FileNum) & " ,共 " & I & " 个数据包", , "友情提示"
        
        Close FileNum
    End If
    End Sub
    -----------------------------------------------------------------
    Public Sub LoadBinFile(AFNo As String)
    '根据文件号,保存文件到当前路径下 TempFiles \Dim FileNum As Integer  '自由文件号
    Dim Chunk() As Byte     '二进制数组
    Dim I As Integer        '文件块ID
    Dim fsDim OrsPp As New ADODB.Recordset
    Dim NewFileName As StringIf AFNo = "" Then Exit SubSet fs = CreateObject("Scripting.FileSystemObject")If fs.FolderExists(App.Path & "\TempFiles") = False Then fs.CreateFolder (App.Path & "\TempFiles")
    OrsPp.Open "select * from BinFilePack where FileNo=" & AFNo & " And XM_CodeID='" & XM_CODEID & "' Order By FileID", Con1, 3, 1NewFileName = App.Path & "\TempFiles\" & OrsPp.Fields("FileNo") & OrsPp.Fields("FileName")If Not fs.FileExists(NewFileName) Then  '如果文件不存在那么,保存文件到本地
      
      FileNum = FreeFile      '得到自由文件号
      
      Open NewFileName For Binary Access Write As FileNum
      
      Do Until OrsPp.EOF
          ReDim Chunk(OrsPp.Fields("FileBlockSize"))
          Chunk() = OrsPp.Fields("FileMemo")
          If LOF(FileNum) = 0 Then
              Put FileNum, , Chunk()
          Else
              Put FileNum, LOF(FileNum) + 1, Chunk()
          End If
          OrsPp.MoveNext
      Loop
      
      Close FileNum
    End IfOrsPp.CloseSet fs = Nothing
    End Sub
    --------------------------------------------------------
    Public Sub ShowOleObjFile(AFNo As String)
    '根据文件号显示Ole对象文件
    Dim iTask As Long, ret As Long, pHandle As LongOrsT0.Open "select * from BinFilePack where FileNo=" & AFNo & "  And XM_CodeID='" & XM_CODEID & "' Order By FileID", Con1, 3, 1
    Select Case UCase(OrsT0.Fields("FileExpName"))
      Case "JPG", "BMP", "XLS", "VSD", "PPT", "MP3", "GIF"
        iTask = Shell("Explorer """ & App.Path & "\TempFiles\" & OrsT0.Fields("FileNo") & OrsT0.Fields("FileName") & """ ", vbNormalFocus)
      Case "TXT", "INI"
        iTask = Shell("Notepad """ & App.Path & "\TempFiles\" & OrsT0.Fields("FileNo") & OrsT0.Fields("FileName") & """ ", vbNormalFocus)
      Case "DOC"
        iTask = Shell("WinWord """ & App.Path & "\TempFiles\" & OrsT0.Fields("FileNo") & OrsT0.Fields("FileName") & """ ", vbNormalFocus)
      Case "RAR", "ZIP"
        iTask = Shell("WINRAR """ & App.Path & "\TempFiles\" & OrsT0.Fields("FileNo") & OrsT0.Fields("FileName") & """ ", vbNormalFocus)
    End Select
    OrsT0.CloseEnd Sub