【问题标题】:VBA Access - Checking recordset on subform loadVBA Access - 在子表单加载时检查记录集
【发布时间】:2016-09-15 09:38:06
【问题描述】:

我有一个On_Load() sub,它逐条检查子表单上的记录。例如,如果子表单加载了 12 条记录,我需要子表单从第一条记录开始,运行 DCount(它检查作业号是否出现在不同的表上),然后移动到下一条记录,并检查那个,等等,直到它到达最后一条记录。这是我目前的代码:

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 上,并且一遍又一遍地检查第一条记录。我做错了什么?

【问题讨论】:

  • 您的代码对我来说毫无意义。您正在对与您的记录集无关的条件进行循环,并且在您的循环中,您不会对记录集中存在的任何值执行任何操作。你想达到什么目的??
  • @ThomasG 我正在尝试遍历加载到记录集中的十二条记录并对它们执行某些操作(取决于 DCount)。
  • Dount 和之后的所有操作都是根据您的表单(我!)而不是记录集的值执行的。那么在上面循环有什么用呢?

标签: ms-access vba


【解决方案1】:

您的问题是您无法为每条记录单独锁定一个字段。

因此[Added to Schedule] 可能会在循环期间更改其锁定,但会保留循环中最后一条记录的设置。

【讨论】:

  • 好的,我已经删除了该行,只是将更新保留为 true 或 false 行。我的代码现在循环了正确的次数,但只一遍又一遍地更新第一行。我觉得指定 strSpec 和 strJob 的两行没有更新。
  • 像@Thomas G 一样,我看不到您正在更新任何内容。根本没有任何可以更新的代码。
【解决方案2】:

我现在已经自己解决了。在此页面上找到 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

【讨论】:

  • 正如我所说的 ;)
猜你喜欢
  • 2019-01-29
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 2014-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多