2017-07-07 96 views
0

我有一个主窗体和一个显示多个记录的子窗体。当在主窗体上选中复选框时,我希望更新子窗体上的所有“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 

但我发现了“项目不是在收集找到”错误。

+0

应该可能使用RecordsetClone。甚至不必声明一个记录集对象变量。 – June7

+0

我以为只有在我不希望记录被更改时才应该使用它?但我想更新记录。 – Jaitnium

+0

哎呀,没错,对不起,无视。 – June7

回答

1

我会建议一种替代方法。

创建更新查询并传递一个布尔参数,指示材料抵达值。

'Call update query 
Private Sub MaterialArrived_chkbx_Click() 
    With CurrentDb().QueryDefs("Update Orders") 
     .Parameters("[prmMaterialArrived]").Value = Me.MaterialArrived_chkbx.Value 
     .Parameters("[prmID]").Value = Me!ID 
     .Execute dbFailOnError 
    End With 
    Me.[Order Form].Form.Requery 
End Sub 


'SQL 
PARAMETERS [prmMaterialArrived] Bit, [prmID] Long; 
UPDATE T 
SET T.[Material arrived] = [prmMaterialArrived], T.BoxLblTime = Now() 
WHERE (((T.ID)=[prmID])); 
+0

我会试试这个,让你知道它是怎么回事。 – Jaitnium

+0

我创建了更新查询,添加了两个字段,然后在示例代码中替换了正确的名称,但第一个参数(材料已到达)中收到“收藏中找不到的项目”。 – Jaitnium

+1

您是否检查过字段名称?你可以发布更新SQL和代码来看看吗? –