MS Access:使用 VBA 从表单字段向记录添加附件

MS Access: Add attachment to record from Form field using VBA

我有一个带 属性 'Data Entry = Yes' 的有界表单,它有多个文本框和一个附件类型的字段。

我有一个“保存”按钮,提示确认保存记录。

在表单上,​​我放置了一个标记为 'Includes training' 的复选框。

如果选中该复选框,我想向同一个 table 添加一条附加记录(不同于通过有界表单添加的记录),其信息与有界表单中插入的记录完全相同形式,除了一个文本字段,该文本字段将有所不同并在 VBA 代码中定义。

我尝试了 CurrentDB.Execute SQL 查询,但它不适用于附件字段类型。

solution proposed in the documentation 不适用于这种情况,因为我想获取包含在表单上的有界附件字段中的附件,而不是来自磁盘上的路径。

我认为像下面这样的东西可以工作,但是当我测试它时,它保存了来自有界表单的记录,但没有保存我想用 VBA 代码添加的附加记录,并且它结束了错误:

424 Object Required

VBA代码:

Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim ctl As Control
    On Error GoTo Err_BeforeUpdate

    If Me.Dirty Then
      If MsgBox("Do you want to save the new record?", vbYesNo + vbQuestion, _
              "Save Record") = vbNo Then
         Me.Undo
         MsgBox "Changes discarded."
      Else
        If Me.checkbox.Value = True Then
        
            Set rsTable = db.OpenRecordset("Table")
            
            With rsTable
            .AddNew
            !TextField1 = Me.TextField1.Value
            !TextField2 = "My Own Text Field"
            !AttachmentField = Me.AttachmentField.Value 
            .Update
            .Bookmark = .LastModified
            End With

            MsgBox "Record was correctly saved."
        End If
    End If
    End If
End Sub

非常感谢您的帮助。

编辑:

很明显,这不是保存新记录的正确方法,但我需要将此记录保存在有界窗体上的同一时间(或之后)。我不希望用户填写另一个有界表单。

之所以这样是因为我输入的是语言认证记录,而且有更广泛的认证,包括两个级别。 因此,复选框表示“您是否也想包括之前的级别?”,如果选中,则上传的 PDF 证书对于级别 1 和级别 2 均有效。 除了记录的级别名称外,所有信息都相同。

我需要这两个是单独的记录,因为我也可以单独拥有它们,稍后我会根据这些单独的语言水平检查条件。

要使用附件字段,您可以使用特殊方法 LoadFromFile 将附件放入数据库中,并使用 SaveFromFile 将附件从数据库中取回。您似乎试图将字符串分配给附件字段。

我没看到 db 在哪里定义。您是说 CurrentDb 吗?

我看到的另一个问题是您在 With 块中使用了 bang 符号。 Bang 表示法是字符串查找。如果您想按名称调用该项目,您可以这样做:

With CurrentDb.OpenRecordset("Table")
    .AddNew
    .Fields.Item("TextField1").Value = Me.TextField1.Value
    .Fields.Item("TextField2").Value = "My Own Text Field"
    .Fields.Item("AttachmentField").LoadFromFile Me.AttachmentField.FileName
    .Update
    .Bookmark = .LastModified
    .Close
End With

这些项目的名称必须正确。

我最终通过创建一个单独的边界来解决这个问题,如果复选框被选中,当我在原始边界表单上点击“保存”时弹出。用户可以选择是上传与原始绑定表单相同的文档,还是上传不同的文档。