首页 文章

MS Access:循环子窗体记录导致错误'3021'

提问于
浏览
0

我有一个主窗体和一个显示多个记录的子窗体 . 当在主窗体上选中复选框时,我希望更新子窗体上的所有“BoxLblTime”和“Material Arrived”字段 . 这是单击复选框时执行的vba代码:

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'没有当前记录 .

为什么会出现这种不寻常的行为?

EDIT: 这是使用更新查询方法的代码:

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

但我收到“物品未找到收集”错误 .

1 回答

  • 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]));
    

相关问题