【问题标题】:One line of code in Loop gives undesirable resultsLoop 中的一行代码会产生不良结果
【发布时间】:2017-05-11 19:45:41
【问题描述】:

下面的代码将所选记录的值复制到我表单上的所有记录中。

但是,代码中的这一行给了我不希望的结果

.Fields("ResultsID").Value = Me.TestResultID.Value

不是将每条记录的 TestResultID 复制到 ResultsID 中,而是使所有 ResultsID 与所选记录的 TestResultsID 相同。

将那行代码移到哪里最好?

With Me.RecordsetClone
.MoveFirst
Do While .EOF = False
If .Fields("[Ordered Analyte]").Value = Me.[Ordered Analyte].Value Then
.Edit
    .Fields("DateStarted").Value = Me.DateStarted.Value
    .Fields("TimeStarted").Value = Me.TimeStarted.Value
    .Fields("DateCompleted").Value = Me.DateCompleted.Value
    .Fields("TimeCompleted").Value = Me.TimeCompleted.Value
    .Fields("Result").Value = Me.Result.Value
    .Fields("Count").Value = Me.[txtCount].Value
    .Fields("ResultsID").Value = Me.TestResultID.Value
.Update
End If
.MoveNext
Loop
End With

【问题讨论】:

  • 看起来你根本没有移动表单中的记录,只是克隆,所以你一直分配相同的值。为什么不创建两个记录集,并嵌套你的 do 循环,这样你就可以遍历每条记录。或者使用您的 Do-Loop 并使用 findrecord 方法而不是 IF 语句来获取您的匹配项。
  • @geeFlo 很抱歉,这让我头疼
  • 查找“嵌套循环”,因为您的答案可能在那里,并且您可能想要创建两个不同的记录集 - 一个读取,一个写入。永远不要真正使用记录等克隆,因为我认为它们是只读的,但看起来您的代码只写过一条记录(其中 [Ordered Analyte] = 自身)。你是用另一个程序来调用它吗?
  • 英文:代码以With Me.RecordsetClone开头,表示所有记录都是重复的。如果 Me 是一个表单,则表单中的所有记录构成一个记录集,并且该记录集被复制或克隆。所以看起来您正在将原始记录集与完全相同的副本进行比较。如果不知何故代码似乎正在工作,那么我们看不到的其他事情正在发生。 ResultsID 的问题可能是它是自动编号且无法更新?
  • Me.TestResultID是个什么样的控件?一个文本框,组合框?

标签: loops ms-access vba


【解决方案1】:

替换

.Fields("ResultsID").Value = Me.TestResultID.Value

.Fields("ResultsID").Value = .Fields("TestResultsID").Value

使用每个单独记录中的 TestResultsID 而不仅仅是当前记录。

【讨论】:

  • 抛出运行时错误 3265,在此集合中找不到项目。
  • 表中“TestResultID”字段的确切名称是什么?这就是你应该在我有“TestResultsID”的最后一组引号中使用的内容。
【解决方案2】:

下面的代码将选中记录的值复制到所有记录 在我的表格上。

和:

它使所有 ResultsID 与所选记录的 TestResultsID 相同。

因此,您的代码完全按照预期工作

【讨论】:

    猜你喜欢
    • 2014-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2017-08-18
    相关资源
    最近更新 更多