2012-12-05 14 views
2

我有一个连续的窗体,在页脚中的命令按钮更新当前记录的值将使该记录不再显示在窗体中重新查询。我希望用户能够单击该按钮,一旦记录更新,移动到下一个记录,而不是默认行为。我有代码,我认为应该工作,但没有,它会一直回到表单上的第一条记录。微软Access如何更新当前行,移动到下一个记录,而不是第一个

Private Sub cmdCloseReq_Click() 

Dim ReqID As String 
ReqID = Me.txtReqID 
Dim rst As Recordset 
Dim strBookmark As Integer 

Set rst = Me.RecordsetClone 
rst.MoveNext 
If Not rst.EOF Then     ' if not end-of-file 
    strBookmark = rst.Bookmark  ' ...save the next record's bookmark 
    Dim cmd As New ADODB.Command 
    With cmd 
    .ActiveConnection = CurrentProject.Connection 
    .CommandType = adCmdStoredProc 
    .CommandText = "spUpdateLOG_ReqCompleteDate" 
    .Parameters("@ReqID") = ReqID 
    .Execute 
    End With     
Me.Requery 
Me.Bookmark = strBookmark 

End If 
Set rst = Nothing 

End Sub 

好的,我找到了一个基于rene的帖子的解决方案。我抓住下一个记录的主键,做一个更新,然后在重新请求之后,我找到下一个记录并设置书签。这里是代码:

Private Sub cmdCloseReq_Click() 

Dim ReqID As String 
ReqID = Me.txtReqID 
Dim rst As New ADODB.Recordset 
Dim strBookmark As String 

Set rst = Me.RecordsetClone 

With rst 
.Find "[ReqID] = '" & ReqID & "'" 
.MoveNext 
strBookmark = rst.Fields(0) 

End With 

If Not rst.EOF Then     ' if not end-of-file 
     ' ...save the next record's bookmark 

    Dim cmd As New ADODB.Command 

    With cmd 
    .ActiveConnection = CurrentProject.Connection 
    .CommandType = adCmdStoredProc 
    .CommandText = "spUpdateLOG_ReqCompleteDate" 
    .Parameters("@ReqID") = ReqID 
    .Execute 
    End With     ' ...delete the record 

    Me.Requery 

Set rst = Me.RecordsetClone 
With rst 
     .Find "[reqID]= " & strBookmark 
    Me.Bookmark = .Bookmark 

End With 

Else 
    With cmd 
    .ActiveConnection = CurrentProject.Connection 
    .CommandType = adCmdStoredProc 
    .CommandText = "spUpdateLOG_ReqCompleteDate" 
    .Parameters("@ReqID") = ReqID 
    .Execute 
    End With     ' ...delete the record 
Me.Requery 

End If 
Set rst = Nothing 

回答

1

我记得书签在Requery后失效。如果您有主键,则可以更好地抓取该主键,并在查询后将当前记录移至之前获得的主键

相关问题