2016-09-15 69 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

正是我说的;) –