【问题标题】:Looping error, too many records added循环错误,添加的记录太多
【发布时间】:2017-12-15 03:50:24
【问题描述】:

我一直在尝试编写 Access VBA 代码来自动添加用于发芽测试的重复。

基本上我有一个表格,我可以在其中输入代表总数 (NoofReps) 和每个代表的种子数 (RepSize)(例如 50 个种子)。对于添加的每条记录,我希望它自动为每个代表添加一条记录并自动计算 Rep Number(即,如果我有 4 个代表,那么它应该添加 4 条记录,编号为 1-4 个代表)以及 RepSize(例如 50) .

我一直在根据来自该论坛和其他论坛的信息尝试各种循环,但在生成的记录数量方面仍然出现错误。我已经尝试过“Do while”和“Do until”,但无论哪种方式都得到相同的结果。

有人可以告诉我哪里出错了吗?...如果我想要 2 次,则增加 2,如果我想要 3,则增加 246,如果我想要 4,则增加 >30,000!!!

为了尝试修复代码,我已经开始在 iNoofReps 的代码中手动输入代表次数,以便我知道错误在代码中,而不是在表单中。

Private Sub CmdAddReps3_Click()
Dim iRepNo As Integer   ' stores the current value in the series

'Open the table
Set db = CurrentDb()
Set rstGReps = db.OpenRecordset("tblGReplicates")

' Initialise the variables
iRepNo = 1
iNoofReps = 3   'iNoofReps = Me.txtNoofReps

' Add the records using a loop
    rstGReps.movefirst

Do 'Until rstGReps("RepNo") = (iNoofReps + 1) ' always want to include at least 1 repNo

rstGReps.AddNew
rstGReps("GTestID") = Me.GTestID
rstGReps("RepNo") = iRepNo
rstGReps("NoofSeed") = Me.txtNoOfSeeds

' Calculate the next RepNo value in the loop
iRepNo = iRepNo + 1
rstGReps.Update
rstGReps.moveNext

Loop Until rstGReps("RepNo") = (iNoofReps) + 1 ' so that the loop includes the final repNo.

MsgBox "Finished Looping"
rstGReps.Close

Set rstGReps = Nothing
Set db = Nothing

End Sub

任何帮助将不胜感激!!!

【问题讨论】:

    标签: for-loop ms-access while-loop vba


    【解决方案1】:

    好吧,你在这里移动下一个:rstGReps.moveNext,然后你在下一个移动后比较rstGReps("RepNo") = (iNoofReps) + 1,因此在一个空记录上,因此总是等同于假。

    Loop Until iRepNo = (iNoofReps) + 1 应该修复它,然后您不再引用记录集,在您引用它时它已经设置为下一条记录。

    你也可以通过去掉这行来修复它:

    rstGReps.moveNext

    由于rstGReps.AddNew 已经将记录集移动到新的空白记录,因此在添加记录后将其向前移动没有多大意义。如果你删除它,你可能想删除Loop Until rstGReps("RepNo") = (iNoofReps) + 1中的+ 1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-30
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      • 2020-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多