使用 MS Access VBA 添加/查看附件 [英] Add/view attachments using MS Access VBA

查看:105
本文介绍了使用 MS Access VBA 添加/查看附件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用这些函数来管理附件表而不使用 in Access 接口,因此人们无法删除或破坏内容,但是,每当我尝试调用任何这些功能.

I'm trying to use these functions to manage an attachment table without using the in Access interface so people can't delete or break stuff, however, I'm getting Argument not Optional compiler errors whenever I try and call any of these functions.

http://blogs.office.com/b/microsoft-access/archive/2007/08/24/adding-removing-and- Saving-files-from-the-new-attachment-field-in-access-2007.aspx

在按钮的 onclick 事件中我有

in the onclick event of a button i have

Database.OpenRecordset tblAttach
Recordset.AddNew
Call AddAttachment
Recordset.Update

我遇到的另一个问题是,此代码仅用于从直接路径导入,我确实需要一个文件对话框选择文件的方法,但我不知道该放什么

Another problem I'm having with this is that this code is only for importing from a direct path and I'd really need a file dialog method of file selection, but I'm not sure what to put beyond

Dim f As Object
Set f = Application.FileDialog(3)
f.AllowMultiSelect = False
'*** not sure how to get the path to f to insert it into the table
f.Show

推荐答案

你的第一个问题是你没有仔细阅读你提到的链接中的代码.
AddAttachment 子程序定义为:

Your first problem comes from the fact that you didn't carefully read the code in the link you mention.
The AddAttachment subroutine is defined as:

AddAttachment(ByRef rstCurrent As DAO.Recordset, _
              ByVal strFieldName As String, _
              ByVal strFilePath As String)

这意味着它有 3 个强制参数:

This means that it has 3 mandatory parameters:

  • rstCurrent 要存储文件的表的打开记录集.该文件将被添加到记录集当前记录中.

  • rstCurrent an open recordset for the table where you want to store your file. The file will be added to the recordset current record.

strFiledName将保存文件的附件字段的名称.您在 Access 中创建的 tblAttach 表必须至少有一个附件字段(可能还有其他字段以及与附件相关的信息,以便您可以找到它,例如文档名称和 ID,也许文档的原始路径等).

strFiledNamethe name of the attachment field where the file will be saved. Your tblAttach table that you created in Access must have at least one Attachment field (and probably other fields as well for information related to the attachment so you can find it, like a document name, and ID, maybe the original path of the document, etc).

strFilePath 要附加的文件所在的绝对路径.

strFilePath the absolute path to where the file to be attached is located.

你的第二个问题是让用户通过文件对话框选择他们想要的文件:

Your second problem is to let users select the file they want through a file dialog:

Public Function SelectFile() As String
    Dim fd As FileDialog
    Set fd = Application.FileDialog(msoFileDialogOpen)
    With fd
        .AllowMultiSelect = False
        .Title = "Please select file to attach"
        If .show = True Then
            SelectFile = .SelectedItems(1)
        Else
            Exit Function
        End If
    End With
    Set fd = Nothing
End Function

调用这个函数 SelectFile() 让用户选择一个文件.如果操作被取消或没有选择文件,该函数将返回文件的完整路径或空字符串.

Call this function SelectFile() to let the user choose a file. The function will return the full path to the file or an empty string if the operation was cancelled or no file selected.

为了让用户在保存附件时选择文件名和位置,代码类似:

For letting the user select the name and location of the file when they want to save the attachment, the code is similar:

Public Function SelectSaveAs(initialName As String) As String
    Dim fd As FileDialog
    Set fd = Application.FileDialog(msoFileDialogSaveAs)
    With fd
        .Title = "Save Attachment"
        .InitialFileName = initialName
        If .show = True Then
            SelectSaveAs = .SelectedItems(1)
        Else
            Exit Function
        End If
    End With
End Function

调用 SelectSaveAs("toto.xls") 例如为附件建议一个名称,并让用户选择保存它的位置(他们也可以更改名称).该函数将返回保存附件的文件的完整路径.

Call SelectSaveAs("toto.xls") for instance to suggest a name for the attachment and let the user select where they will save it (and they can change the name as well). The function will return the full path to the file where you will save the attachment.

现在,您可以将所有内容放在一起.

Now, you can put everything together.

假设您创建了一个 tblAttach,其中包含一个 Files 字段.
我们可以在您提到的链接中重写测试:

Say you have created a tblAttach that has a Files field in it.
We can rewrite the test in the link you mention as such:

    Dim dbs As DAO.database
    Dim rst As DAO.RecordSet

    ' Ask the user for the file
    Dim filepath As String
    filepath = SelectFile()

    ' Check that the user selected something
    If Len(filepath) = 0 Then
        Debug.Assert "No file selected!"
        Exit Sub
    End If

    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("tblAttach")

    ' Add a new row and an attachment
    rst.AddNew
    AddAttachment rst, "Files", filepath
    rst.Update

    ' Close the recordset
    rst.Close
    Set rst = Nothing
    Set dbs = Nothing

为了让用户保存文件,你可以做一些类似的事情:打开记录集,移动到包含你想要保存的文件的记录,询问用户文件名,然后将所有这些信息传递给 SaveAttachment 子程序.

To let the user save back the file, you would do something similar: open the recordset, move to the record that contains the file you want to save, ask the user for the filename, then pass all this information to the SaveAttachment subroutine.

这篇关于使用 MS Access VBA 添加/查看附件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆