MSAccess - 插入后重新查询子表单?

时间:2017-03-09 14:01:02

标签: ms-access

背景:

我有一个子表格(数据表)我使用数据表复选框更新后更新事件:

  1. 我克隆点击的记录&通过“插入查询”
  2. 插入引用的表中
  3. 我修改原始记录以通过更新查询区分插入的记录
  4. 为避免RecordLock投诉,我在上述各项之后插入了SendKeys "+{Enter}", True来保存更新 - 有更好的方法吗?

    接下来我需要重新查询子表单以显示新插入的记录并使用书签(?)来保留原始记录的光标位置(插入的记录将是相邻的)。子表单数据表记录集基于查询。

    问题:

    1. 在子表单的afterupdate事件中,使用Forms![ParentForm].[SubForm].Form.Requery不会产生错误,但会打开代码窗口,并以黄色突出显示该行。

    2. 接下来尝试,从子窗体的afterupdate事件中,我尝试使用Forms![ParentForm].[SubForm].Form.Requery将焦点设置为ParentForm之前的控件,但是我得到了类似的〜无声错误〜如上所述。 / p>

    3. 从同一子表单中请求子表单的正确方法是什么?

    4. 谢谢!

1 个答案:

答案 0 :(得分:2)

你为自己制造的方式太难了。以下是如何从按钮单击复制记录。没有锁,没有查询,并且自动更新表单:

Private Sub btnCopy_Click()

  Dim rstSource   As DAO.Recordset
  Dim rstInsert   As DAO.Recordset
  Dim fld         As DAO.Field

  If Me.NewRecord = True Then Exit Sub

  Set rstInsert = Me.RecordsetClone
  Set rstSource = rstInsert.Clone
  With rstSource
    If .RecordCount > 0 Then
      ' Go to the current record.
      .Bookmark = Me.Bookmark
      With rstInsert
        .AddNew
          For Each fld In rstSource.Fields
            With fld
              If .Attributes And dbAutoIncrField Then
                ' Skip Autonumber or GUID field.
              ElseIf .Name = "SomeFieldToHandle" Then
                rstInsert.Fields(.Name).Value = SomeSpecialValue
              ElseIf .Name = "SomeOtherFieldToHandle" Then
                rstInsert.Fields(.Name).Value = SomeOtherSpecialValue
              ElseIf .Name = "SomeFieldToSkip" Then
                ' Leave empty or with default value.
              ElseIf .Name = "SomeFieldToBlank" Then
                rstInsert.Fields(.Name).Value = Null
              Else
                ' Copy field content.
                rstInsert.Fields(.Name).Value = .Value
              End If
            End With
          Next
        .Update
        ' Go to the new record and sync form.
        .MoveLast
        Me.Bookmark = .Bookmark
        .Close
      End With
    End If
    .Close
  End With

  Set rstInsert = Nothing
  Set rstSource = Nothing

End Sub

如果按钮位于父表单上,请将Me替换为:

Me!NameOfYourSubformControl.Form

AddNewUpdate之间,您可以修改和插入代码,以调整不应复制的某些字段的值。