2017-07-07 131 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和代碼來看看嗎? –