0

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

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

在表格上,我放置了一个标有“包括培训”的复选框。

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

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

文档中提出的解决方案不适用于这种情况,因为我想获取包含在表单上的有界附件字段中的附件,而不是来自磁盘上的路径。

我认为类似下面的东西可以工作,但是当我测试它时,它会保存有界表单中的记录,而不是我想用 VBA 代码添加的额外记录,并且它以错误结束:

424 需要对象

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 均有效。除级别名称外,所有信息都相同的记录。

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

4

2 回答 2

0

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

我看不到在哪里db定义。你的意思是CurrentDb

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

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

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

于 2021-08-30T15:18:29.947 回答
0

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

于 2021-09-03T12:16:43.813 回答