首页 > 解决方案 > 重新查询后恢复连续形式

问题描述

MS Access 任意版本。

我有一个连续的表单,它显示记录集的一部分,基于可以以多种方式排序的查询。假设表单显示记录集的 n 条记录(其中 n>1)。表单中的第一行不必显示记录集的第一条记录。选择其中一条记录(假设第 x 行 n 的记录)。

在 Form.Requery 之后,记录集的第一条记录将始终位于表单的第一行。第一条记录也被选中。

这不好。我想在 Form.Requery 之后恢复表单,以便所选记录仍然在表单的第 x:th 行上,前提是这总是可能的。x:th 行上方和下方显示哪些记录显然取决于记录集的基础查询。

在我的情况下,如果有一种方法可以在 Form.Requery 之前计算所选行和表单中的第一行之间有多少行,则可以实现这一点。

如果选择了表单的第一行,则该计算将(与显示的记录集的哪一部分无关)结果为 0,如果选择了表单的第二行,则为 1,依此类推。

我怎么做?

还是有另一种方法可以实现相同的目标?

标签: vbams-access

解决方案


如果您在表单中有任何唯一列,那么您可以执行以下操作:

Dim uniqueId : uniqueId = me.uniqueField_Value
' uniqueId hold the current selected unique field value
   Form.Requery
       With Me.RecordsetClone
      '   if uniqueId is numeric use next line
        .FindFirst "[uniqueField] = "  uniqueId 
      ' if uniqueId is string uncomment next line and comment previous line 
      '  .FindFirst "[uniqueField] = " & """" & uniqueId & """"
        If Not .NoMatch Then
            Me.Bookmark = .Bookmark
        End If
    End With

推荐阅读