我正在创建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
答案 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
所有这些操作将确保您一直处于新记录模式。