Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access MSAccess-插入后重新查询子窗体?_Ms Access - Fatal编程技术网

Ms access MSAccess-插入后重新查询子窗体?

Ms access MSAccess-插入后重新查询子窗体?,ms-access,Ms Access,背景: 我有一个子表单(数据表),我在更新事件后使用数据表复选框进行更新: 我克隆单击的记录并通过插入查询将其插入到引用的表中 我通过更新查询修改原始记录以区别于插入的记录 为了避免记录锁投诉,我在上述每一项之后插入:SendKeys“+{Enter}”,True,以保存更新-有更好的方法吗 接下来,我需要重新查询子窗体以显示新插入的记录,并使用书签(?)保留原始记录的光标位置(插入的记录将相邻)。子窗体数据表记录集基于查询 问题: 在子窗体的afterupdate事件中,使用Forms![Pa

背景:

我有一个子表单(数据表),我在更新事件后使用数据表复选框进行更新:

  • 我克隆单击的记录并通过插入查询将其插入到引用的表中
  • 我通过更新查询修改原始记录以区别于插入的记录
  • 为了避免记录锁投诉,我在上述每一项之后插入:
    SendKeys“+{Enter}”,True
    ,以保存更新-有更好的方法吗

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

    问题:

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

  • 下一次尝试,在子窗体的afterupdate事件中,我尝试在使用
    Forms之前将焦点设置为父窗体上的控件![ParentForm].[SubForm].Form.Requery
    ,但我遇到了类似的~silent错误~如上所述

  • 从同一子表单中重新查询子表单的正确方法是什么


  • 谢谢

    你让这对你自己来说太难了。下面是如何通过单击按钮复制记录。无锁定、无查询和表单自动更新:

    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
    

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

    Gustav-谢谢!我将看看这个例子,特别是书签部分。在我的实例中,该事件是由子窗体数据表上的复选框上的afterupdate事件与父窗体上的按钮上的afterupdate事件触发的。你怀疑有什么问题吗?古斯塔夫-哇。功能完美,甚至内置了调整克隆的选项。如果我能投票支持你的答案+10,我会谢谢伟大的奇怪的是,这种自适应技术非常适合访问,但是您很少会遇到类似的代码。有没有建议在
    .Update
    之后对记录集重新排序,但保留书签?插入的记录显示在数据表的底部,而不是在其他记录中排序。事实发生后,只需在第一条记录处对我进行简单的重新排序。Nevermind-获得:重新排序,然后:
    me.RecordsetClone.FindFirst