我有一个主窗体和一个显示多个记录的子窗体。当在主窗体上选中复选框时,我希望更新子窗体上的所有“BoxLblTime”和“材料到达”字段。这是在点击复选框时执行的VBA代码:MS Access:通过子窗体记录循环导致错误'3021'
Private Sub MaterialArrived_chkbx_Click()
Dim temp As Variant
Dim tempString As String
Dim ctl As Control
'If checkbox is checked
If Forms("JOBS Form").Controls("MaterialArrived_chkbx").Value < 0 Then
Dim rs As Object
'Get records of subform
Set rs = Forms("JOBS Form").[Order Form].Form.Recordset
'Loop until end
Do While Not rs.EOF
rs.Edit
'Update the two fields
rs![Material arrived] = True
rs!BoxLblTime = Now()
rs.Update
rs.MoveNext
Loop
Set rs = Nothing
End If
End Sub
有使用此代码时,一些不寻常的行为:
1)当主窗体上的复选框被选中,这两个领域在子窗体中更新。但是,如果我取消选中子窗体上的复选框,然后重新检查主窗体复选框,则子窗体复选框将保持未选中状态。
2)当主窗体上的复选框被选中时,两个字段被更新。但是如果我取消选中子窗体上的复选框,移动到一组新的子窗体记录(下一个或后一个),然后检查主窗体复选框,我得到错误:'3021'没有当前记录。
为什么会发生这种不寻常的行为?
编辑: 下面是一个使用更新查询方法我的代码:
Private Sub MaterialArrived_chkbx_Click()
If Forms("JOBS Form").Controls("MaterialArrived_chkbx").Value < 0 Then
With CurrentDb().QueryDefs("Update Orders")
.Parameters("[Material Arrived]").Value = True
.Parameters("[BoxLblTime]").Value = Now()
.Execute dbFailOnError
End With
Forms("JOBS Form").Form.Requery
End If
End Sub
但我发现了“项目不是在收集找到”错误。
应该可能使用RecordsetClone。甚至不必声明一个记录集对象变量。 – June7
我以为只有在我不希望记录被更改时才应该使用它?但我想更新记录。 – Jaitnium
哎呀,没错,对不起,无视。 – June7