同时还相问,我想做一个有“附件”功能的程序,附件的文件格式为word,怎么把word文件保存在数据库,同时又可以显示在某一控件中(只需要文件名),然后双击它,用word打开继续加分!

解决方案 »

  1.   

    下面是原来我做过的将图片文件存入数据库的例子,DOC文件的路子是一样的,你可以看看:)
    主要是使用AppendChunk和GetChunk方法,以下是frm文件中的源代码,代码中有功能的注释。当然取出显示的时候可以使用OLE控件: Option Explicit ' 本程序使用的 Access 数据库的格式如下: 

    ' 数据库名称:              picdata.mdb 
    ' 表名称:                  pic 
    ' 字段列表: 
    '                            ID            自动编号 
    '                            Key          图片描述(文本) 
    '                            FileName      图片文件名称(文本) 
    '                            FileData      图片的二进制数据(OLE对象) 

    ' 使用方法:使用 Browse 按钮浏览图片,使用 Save 按钮将图片存储到数据库。 Private Const BLOCK_SIZE = 1024 * 8 '设定一次读取的缓冲区大小(8K) Private Cnn As Connection 
    Private Rst As Recordset '用于添加数据的记录集合 
    Private WithEvents RstView As Recordset '用于浏览的记录集合 ' 这个Sub用于显示“打开文件”对话框 Private Sub cmdBrowse_Click()     cdlOpen.Filter = "BMP¦*.bmp¦GIF¦*.gif¦JPEG¦*.jpg" 
        cdlOpen.FileName = "" 
        cdlOpen.ShowOpen 
        If cdlOpen.FileName = "" Then Exit Sub 
        
        Debug.Print cdlOpen.FileName 
        Debug.Print cdlOpen.FileTitle 
        
        txtFileName.Text = cdlOpen.FileName 
        txtDesc.Text = cdlOpen.FileTitle End Sub ' 这个Sub用于将选定的图片存储到数据库中 Private Sub cmdSave_Click() On Error GoTo TransError     Dim fs As Object 
        Dim buf() As Byte 
        Dim intFileId As Long 
        Dim intFileSize As Long 
        Dim i As Integer, j As Integer, k As Integer     Set fs = CreateObject("Scripting.FileSystemObject") 
        If Not fs.fileexists(txtFileName.Text) Then 
            MsgBox "Can not read file! - " & txtFileName.Text 
            Exit Sub 
        End If 
            
        If txtDesc.Text = "" Then 
            MsgBox "Please input the description for the file!" 
            Exit Sub 
        End If 
        
        intFileId = FreeFile() 
        Open cdlOpen.FileName For Binary Access Read As #intFileId 
        intFileSize = LOF(intFileId) 
        
        i = intFileSize \ BLOCK_SIZE 
        j = intFileSize Mod BLOCK_SIZE 
        ReDim buf(BLOCK_SIZE) 
        
        Screen.MousePointer = 11 
        DoEvents 
            
        Rem {{{{ 
        
            Cnn.BeginTrans 
            
            Rst.AddNew 
            Rst("FileName") = txtDesc.Text 
            Rst("Key") = txtDesc.Text 
            For k = 1 To i 
                Get #intFileId, , buf() 
                Rst("FileData").AppendChunk buf() 
            Next 
            If j <> 0 Then 
                ReDim buf(j) 
                Get #intFileId, , buf() 
                Rst("FileData").AppendChunk buf() 
            End If 
            Rst.Update 
            
            Cnn.CommitTrans 
            
        Rem }}}} 
        
        Close #intFileId 
        RstView.Requery 
        datFileDesc.Refresh 
        Screen.MousePointer = 0 
        
        txtFileName.Text = "" 
        txtDesc.Text = "" 
        
        Exit Sub 
        
    TransError:     MsgBox "Error! - " & Err.Description 
        Err.Clear 
        Cnn.RollbackTrans End Sub ' 在窗体加载时打开数据库连接,并进行记录集初始化 Private Sub Form_Load()     Dim openString As String     Set Cnn = CreateObject("ADODB.Connection") 
        Cnn.CursorLocation = adUseClient 
        
        openString = "DBQ=" & App.Path & "\PicData.MDB;" 
        openString = openString & "DRIVER={Microsoft Access Driver (*.mdb)}" 
        
        Cnn.Open openString 
        
        Set Rst = CreateObject("ADODB.Recordset") 
        Set RstView = Cnn.Execute("Select key,filename,id from pic") 
        
        Rst.CursorType = adOpenKeyset 
        Rst.LockType = adLockOptimistic 
        Rst.Open "pic", Cnn, , , adCmdTable 
        
        Set datFileDesc.DataSource = RstView End Sub ' 在记录集发生移动时(Datagrid被单击时)显示图片 Private Sub RstView_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)     Dim buf() As Byte 
        Dim intFileId As Long 
        Dim intFileSize As Long 
        Dim i As Integer, j As Integer, k As Integer 
        Dim RstTmp As Recordset     If RstView.EOF() Or RstView.BOF() Then Exit Sub     Set RstTmp = Cnn.Execute("Select FileData From Pic Where ID=" & RstView("ID")) 
        intFileId = FreeFile() 
        Open App.Path & "\" & RstView("FileName") _ 
            For Binary Access Write As #intFileId 
        intFileSize = RstTmp("FileData").ActualSize 
        Debug.Print "intFileSize = " & intFileSize 
        i = intFileSize \ BLOCK_SIZE 
        j = intFileSize Mod BLOCK_SIZE 
        ReDim buf(i) 
            
        Rem {{{{ 
        
            For k = 1 To i 
                buf() = RstTmp("FileData").GetChunk(BLOCK_SIZE) 
                Put #intFileId, , buf() 
            Next 
            If j <> 0 Then 
                ReDim buf(BLOCK_SIZE) 
                buf() = RstTmp("FileData").GetChunk(j) 
                Put #intFileId, , buf() 
            End If 
        
        Rem }}}} 
        
        Close #intFileId 
        pic1.Picture = LoadPicture(App.Path & "\" & RstView("FileName")) 
        Kill App.Path & "\" & RstView("FileName") End Sub 
      

  2.   

    你可用VBA的思路,关于获取文件名我记得WORD有这么一个功能可以列出当前文件的作者时间等信息我帮你找找,找到了就贴上来,你自己也查一下
      

  3.   

    to tief(但求中庸)    我有问题:保存不进去,能留一个email地址,我直接寄给你?