0

搜索和搜索,找不到解决方案。我有一个包含许多连续表单子表单的表单。当我在其中一个子窗体上更改值时,比如说 FIELD_A,我在其他几个子窗体上运行计算,然后焦点返回到 FIELD_A。然而,在计算过程中,父表格的更新发生了,并且需要发生。因此,当我将焦点返回到原始子表单时,子表单上的第一条记录具有焦点。然后我需要去看我正在制作的唱片。

我尝试了几种选择,但没有任何效果。但是,如果我在代码中移动到指定记录的行设置了一个 DEBUG 断点,然后从该行物理运行代码,它就可以工作!我试过在那里设置等待时间,但无济于事。

这是代码片段:

Call common.CalculateAllLoadTotals _
    (Me, Me.AffiliateID, Me.ClientID, Me.FacilityID, Me.ProposalRevision)

Me.Recordset.FindFirst "[AffiliateID] = '" & Me.AffiliateID & "'" & _
                 " AND [ClientID] = " & Me.ClientID & _
                 " AND [FacilityID] = " & Me.FacilityID & _
                 " AND [ProposalRevision] = " & Me.ProposalRevision & _
                 " AND [EquipmentID] = " & currItemID

我也试过这个:

dim currRecord as Long
currRecord = Me.CurrentRecord

' >>> REST OF CODE HERE <<<

Call common.CalculateAllLoadTotals _
    (Me, Me.AffiliateID, Me.ClientID, Me.FacilityID, Me.ProposalRevision)

Me.Form.Recordset.Move = currRecord

正如我所说,如果我通过调试暂停代码然后继续执行,则代码可以工作(任何一个)。奇怪的。

4

2 回答 2

0

我怀疑您正在更新父表单下的记录集。这会导致父表单自动重新查询,因此子表单位置返回到第一条记录。解决方案是更新父窗体上的控件:

Me.Parent!Controlname = XXXX
于 2015-06-19T19:40:27.613 回答
0

抱歉,这不是一个完整的答案,但评论很多。关于您的第一个解决方案-我建议您尝试 Me.Recordset.Requery 以在不移动位置的情况下刷新主窗体中的当前记录。

关于您的第二个选项-我建议您查看书签-在更新记住书签之前,进行一些计算,然后将位置移动到保存的书签。像这样的东西-

  Dim rs As DAO.Recordset

  Set rs = Me.RecordsetClone
  rs.FindFirst "[MyPK]=" & Me!cmbFindByPK
  If Not rs.NoMatch Then
     If Me.Dirty Then
        Me.Dirty = False
     End If
     Me.Bookmark = rs.Bookmark
  End If
  Set rs = Nothing

取自这里为什么要克隆 MS-Access 记录集?

于 2015-06-19T19:54:56.530 回答