我有一個主窗體和一個顯示多個記錄的子窗體。當在主窗體上選中複選框時,我希望更新子窗體上的所有「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