Me.Recordset.AbsolutePosition无法移动到表单中的当前记录

时间:2013-09-17 17:20:57

标签: ms-access

我有一个带有数据表视图的表单我希望将此表单用作列表框(多选扩展),因此当我单击表单中的每个记录/字段时,它使用(清除选择功能)未选择的其他记录并且只选择我关注的记录,现在的问题是在运行清除选择功能后点击每个字段时它会转到第一个记录并且没有将光标移动到当前的聚焦记录。

似乎低于代码

 Me.Recordset.AbsolutePosition = Pos1 

不起作用,不会转移到当前的重点记录。

完整的代码如下:

  Private Sub P_Click()
On Error Resume Next
Dim ct As Control
Dim Cnt As Long, Rws As Long
Dim Pos1 As Long, Pos2 As Long

Pos1 = Me.Recordset.AbsolutePosition

Set ct = ActiveControl


' Clear other selections if Ctrl or Shift key
' is not simultaneously pressed.
If CtrlPressed = 0 And ShiftPressed = 0 Then
   P_ClearSelections

   Me.Recordset.AbsolutePosition = Pos1



    Me.IsSelected = True

    ct.SetFocus
    GoTo ExitPoint
End If

If ShiftPressed > 0 Then
    Rws = Me.SelHeight
    If Rws > 1 Then
        Pos2 = Me.SelTop - 1
        For Cnt = Pos2 To Pos2 + Rws - 1
            Me.Recordset.AbsolutePosition = Cnt
            Me.IsSelected = True
        Next
    End If
    GoTo ExitPoint
End If

Me.IsSelected = True

 ExitPoint:
' Save the status
Me.Dirty = False
' Update display in SF_Selected
Me.Parent("SF_Selected").Requery

ActiveControl.SelLength = 0

Set ct = Nothing
On Error GoTo 0
 End Sub

功能明确选择如下;

   Public Sub P_ClearSelections()
On Error Resume Next

DoCmd.Echo False
' Clear all check boxes
CurrentDb.Execute "UPDATE tblItems " & _
        "SET IsSelected = False;", dbFailOnError
Me.Requery


DoCmd.Echo True

On Error GoTo 0
End Sub

1 个答案:

答案 0 :(得分:1)

您正在重新查找P_ClearSelections()过程中的基础记录集。从Microsoft文档:

  

也无法保证给定的记录具有相同的记录   如果重新获取或重新打开Recordset对象,则为AbsolutePosition。   书签仍然是保留和返回的推荐方式   给定的位置,是在所有类型中定位的唯一方式   Recordset对象。

MSDN AbsolutePosition

我建议您调查Bookmarks的使用(并删除On Error Resume Next语句)。