2016-09-15 73 views
0

我有一個On_Load()子,它檢查子窗體上的記錄,按記錄記錄。例如,如果子窗體加載了12條記錄,則需要該子項以第一條記錄開始,運行DCount(它會檢查該作業編號是否出現在另一個表上),然後移至下一條記錄,然後檢查那一個等,直到達到最後的記錄。這裏是我的代碼的時刻:VBA訪問 - 檢查子窗體加載記錄集

Set rst = Me.RecordsetClone 
    On Error Resume Next 
    rst.MoveFirst 
'Put code to check keyword schedule here. First get job no 
     Do Until Me.Specific_Job_No.Value = "00" 
      strSpec = Format(Me.Specific_Job_No.Value, "00") 
      strJob = Left(Me.Parent.JobRef.Value, 18) + strSpec 
'Then check if that job no is in slot 1, then 2, etc 
      If DCount("*", "tblKeywordsSchedule", "[Slot1] Like ""*" & strJob & "*""") > 0 Then 
       Me![Added to Schedule] = True 
       Me![Added to Schedule].Locked = True 
      Else 
       Me![Added to Schedule] = False 
       Me![Added to Schedule].Locked = False 
      End If 
'Then go to next record 
    rst.MoveNext 
     Loop 

我的問題是,它被卡在rst.MoveNext,只是不斷一遍又一遍檢查的第一條記錄。我究竟做錯了什麼?

+0

你的代碼對我沒有意義。您正在對與您的記錄集無關的標準執行循環,並且在循環中您不會對記錄集中存在的任何值執行任何操作。你想要達到什麼? –

+0

@ThomasG我正在嘗試循環訪問記錄集中的十二條記錄,並對它們進行一些操作(以DCount爲準)。 – TCassa

+0

Dount以及之後的所有內容都是根據您的表單(Me!)中的值執行的,而不是從記錄集中執行的。那麼循環它的效用是什麼? –

回答

0

你的問題是你不能爲每個記錄分別鎖定一個字段。

因此,[Added to Schedule]可能會在循環中更改其鎖定,但會保留循環中最後一條記錄的設置。

+0

好的,我已經刪除了這一行,並保持更新爲true或false行。我的代碼現在循環了正確的次數,但只是一遍又一遍地更新第一行。我覺得指定strSpec和strJob的兩行沒有被更新。 – TCassa

+0

像@Thomas G,我看不到你正在更新任何東西。根本沒有任何代碼可以更新。 – Gustav

0

我現在已經整理出來了。發現TheSmileyCoder的這個網頁上回答: https://bytes.com/topic/access/answers/942501-looping-through-subform-records

我指的是一個表單控件,而不是記錄克隆更新strSpec和strJob字符串 - 這是所有我需要知道(我!)。

If rst.RecordCount > 0 Then 
    With rst 
    rst.MoveFirst 
     Do While Not .EOF 
       strSpec = Format(rst![Specific Job No], "00") 
       strJob = Left(Me.Parent.JobRef.Value, 18) + strSpec 
'Then check if that job no is in slot 1, then 2, etc 
        If DCount("*", "tblKeywordsSchedule", "[Slot1] Like ""*" & strJob & "*""") > 0 Then 
         .Edit 
         rst![Added to Schedule] = True 
         .Update 
        Else 
         .Edit 
         rst![Added to Schedule] = False 
         .Update 
        End If 
      .MoveNext 
     Loop 
    End With 
End If 
+0

正是我說的;) –