メインフォームと複数のレコードを表示するサブフォームがあります。メインフォームでチェックボックスをオンにすると、サブフォームのすべての "BoxLblTime"と "Material Arrived"フィールドを更新します。MS Access:サブフォームレコードをループするとエラー '3021'が発生する
1)メインフォーム上のチェックボックスがチェックされ、二つのフィールド:このコードを使用して、いくつかの異常な動作があり
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
:これはチェックボックスがクリックされたときに実行されるVBAコードでありますサブフォームで更新されます。しかし、サブフォームのチェックボックスをオフにして、メインフォームチェックボックスを再チェックすると、サブフォームチェックボックスはオフのままです。
2)メインフォームのチェックボックスをオンにすると、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