MS Access 表单搜索按钮与编辑按钮冲突

MSAccess Form Search-Button conflicts with Edit-Button

我是这个论坛的新手,也是 Access 的新手。我有以下问题。我创建了一个 Form/Subform 来编辑查询数据。两个控件似乎在我的代码中发生冲突。

"Search_Order" 是未绑定的文本字段。如果输入文本并按下回车键,则会显示查询的相应字段。代码如下所示:

Set rs_Search = Me.RecordsetClone
rs_Search.FindFirst "[OrderNumber]=""" & Search_Order & """"
If rs_Search.NoMatch Then
MsgBox "Sorry, no such record '" & Search_Order & "' was found.", _
vbOKOnly + vbInformation
Else
Me.Recordset.Bookmark = rs_Search.Bookmark
End If
rs_Search.Close
Search_Order = Null
Set rs_Search = Nothing
End Sub

第二个命令“ButtonSetOrderDetails10”应该创建子表单“sfrmChangeOrderDetails”的 RecordsetClone,并将字段“OrderStatus”的值更改为值“10”。

它有这个代码:

Private Sub ButtonSetOrderDetails10_Click()
Dim rs_Status_Change As DAO.Recordset
Set rs_Status_Change = Me.sfrmChangeOrderDetails.Form.RecordsetClone
With rs_Status_Change
Do While Not .EOF
.Edit
.Fields("OrderStatus") = 10
.Update
.MoveNext
Loop
End With
rs_Status_Change.Close
Set rs_Status_Change = Nothing
End Sub

我已经在此处查看了这两个代码并根据我的数据库的需要对其进行了修改。到目前为止,这两种代码都可以正常工作,但不幸的是只有一次。

我的问题是,一旦我按下按钮“ButtonSetOrderDetails10”,我就无法对不同的订单执行同样的操作。我可以搜索其他订单,它已显示,但按钮“ButtonSetOrderDetails10”不再起作用。如果我关闭表单并重新打开它,它会再次工作。

如果有人可以提示我这里做错了什么,那就太好了。

此致,费迪

我很惊讶竟然能用一次。使用 DAO 记录集需要先将数据集读入内存,然后才能看到要编辑的记录,否则只会看到 EOF 而循环不会 运行。尝试:

rs_Status_Change.MoveLast
rs_Status_Change.MoveFirst
With rs_Status_Change

甚至不需要 declare/set/close 记录集对象。

Private Sub Search_Order_AfterUpdate()
With Me.RecordsetClone
    .FindFirst "[OrderNumber]='" & Me.Search_Order & "'"
    If .NoMatch Then
        MsgBox "Sorry, no such record '" & Me.Search_Order & "' was found.", _
        vbOKOnly + vbInformation
    Else
        Me.Bookmark = .Bookmark
    End If
End With
Me.Search_Order = Null
End Sub

Private Sub ButtonSetOrderDetails10_Click()
With Me.sfrmChangeOrderDetails.Form.RecordsetClone
    .MoveLast
    .MoveFirst
    Do While Not .EOF
        .Edit
        .Fields("OrderStatus") = 10
        .Update
        .MoveNext
    Loop
End With
End Sub

可以通过 运行更新操作 SQL 真正简化代码 SQL。

Private Sub ButtonSetOrderDetails10_Click()
CurrentDb.Execute "UPDATE ChangeOrderDetails SET OrderStatus=10 WHERE OrderNumber='" & Me.OrderNumber & "'"
End Sub