有什么编程方法可以删除“访问表单”的“附件控件”上的附件?

时间:2019-08-20 04:10:58

标签: ms-access access-vba ms-access-2013

我正在创建Access上的表单。此表单具有对基础Access DB的源代码控制。此表仅用于将新记录插入数据库(无意修改数据库的任何现有数据)。

在Access DB中,有一个用于附件的字段。并且在窗体上,有一个附件控件,该附件控件是Access DB中“附件”字段的源代码控制。 附件控件允许用户选择文件并附加到表单的当前记录。

我尝试关闭窗体并重新打开,但这意味着窗体要经历其生命周期,并执行BeforeUpdate()+ AfterUpdate()!这意味着刚关闭的Form上的数据已输入到DB中。我不要!

由于此Form仅用于在数据库中创建新记录,因此我希望有一个按钮可以清除当前Form,而无需Form执行其BeforeUpdate()+ AfterUpdate()方法,这意味着我可以t关闭表格并重新打开。我已经为表格指定了默认值,从而获得了大多数控件。我唯一的问题是重置附件控件。

删除该附件控件(不是数据库中的附件字段,而是当前正在使用的表单上的实际数据)上的条目的编程方式(用VBA或其他语言,DAO是什么)?

我知道,在BeforeUpdate()中,您可以通过在BeforeUpdate()的定义中设置其Cancel = true来取消表单的更新。但是仍然应该有一种方法可以通过编程方式处理附件控制(不是附件字段,我知道DAO可以轻松地处理它),似乎愚蠢的是没有办法。

(编辑)附件8/30/19: 最好将文件的路径名存储在Access DB中,而不是将其自身存储在附件中,然后将文件从一个位置复制到另一个位置(以下面的代码为例)。这正是我所做的,因此我不必处理附件控件。我发现此控件在可提供给开发人员的编程动作方面过于局限。

Dim fso As Object
Set fso = VBA.CreateObject("Scripting.FileSystemObject")
On Error GoTo DebugMsg ' DebugMsg is where I defined what happens on Error
fso.CopyFile srcPath, dstPath, False

2 个答案:

答案 0 :(得分:1)

附件字段包含类型为 Recordset2 的子记录集,因此您必须这样处理:

Private Sub DeleteCurrentAttachment()

    Dim Records     As DAO.Recordset
    Dim Attachments As DAO.Recordset2

    Set Records = Me.RecordsetClone
    Records.Bookmark = Me.Bookmark

    Set Attachments = Records!YourAttachmentFieldName.Value
    While Not Attachments.EOF
        Attachments.Delete
        Attachments.MoveNext
    Wend
    Attachments.Close

End Sub

答案 1 :(得分:0)

在设计模式下打开表单。

然后在“表单”属性的“数据”选项卡中>将“数据输入”设置为True。

将事件添加到表单

Private Sub Form_AfterInsert()
 DoCmd.RunCommand acCmdRecordsGoToNew 
End Sub

所有这些操作将确保您一直处于新记录模式。