【问题标题】:Access 2007 VBA Record Set Infinite LoopAccess 2007 VBA 记录集无限循环
【发布时间】:2014-01-15 02:09:37
【问题描述】:

所以我正在做一个查询,当您单击一个按钮时,它会获取一个带有未分配数据字段的记录集,并将该记录集复制到具有新“分配版本”的同一个表中。

我希望我的数据库能够从原始未分配集创建不同/多个“分配版本”,这在我创建第一个分配集时效果很好,但是当我尝试创建一个新分配集时它会进入一个看起来完全随机的循环,它可以创建 10-1000 的新条目,我不知道是什么原因造成的。

抱歉,如果这令人困惑,查看代码可能会有所帮助

谢谢!

Dim rs1 As DAO.Recordset
 Dim unionquery As String

 Dim CURRENT_SOFTWARE_VERSION As String

 CURRENT_SOFTWARE_VERSION = Me.Parent.[Software Version].Value

 initialquery = "select [Test Script] , [PROC_CHECK_ID], [Software Version] from (FORMAL_CERT_PROCEDURE_TEST_SCRIPTS inner join FORMAL_CERT_PROCEDURE_CHECK on FORMAL_CERT_PROCEDURE_TEST_SCRIPTS.TEST_CASE_ID = FORMAL_CERT_PROCEDURE_CHECK.TEST_CASE_ID) inner join FORMAL_CERT_SOFTWARE_VERSION on FORMAL_CERT_PROCEDURE_TEST_SCRIPTS.TEST_CASE_ID = FORMAL_CERT_SOFTWARE_VERSION.TEST_CASE_ID where PROC_CHECK_ID=" & Me.PROC_CHECK_ID & " AND [Software Version]=""" & CURRENT_SOFTWARE_VERSION & """ "

Set rs1 = CurrentDb.OpenRecordset(initialquery, dbOpenForwardOnly)

    Do Until rs1.EOF = True

        Dim rs2 As DAO.Recordset
        Set rs2 = CurrentDb.OpenRecordset( _
                  "SELECT * FROM FORMAL_CERT_PROCEDURE_TEST_SCRIPTS", _
                  dbOpenDynaset)
        rs2.AddNew
        rs2![Test Script] = rs1![Test Script]
        rs2![PROC_CHECK_ID_FK] = rs1!PROC_CHECK_ID
        rs2![Software_Version] = rs1![Software Version].Value
        rs2![TEST_CASE_ID] = Me.TEST_CASE_ID
        rs2.Update
        rs2.Close
        Set rs2 = Nothing

        rs1.MoveNext

    Loop

【问题讨论】:

    标签: ms-access vba ms-access-2007


    【解决方案1】:

    哦,亲爱的。 如果您将记录添加到当前正在迭代的表中,则在到达 EOF 时会遇到问题,因为您不仅要遍历开始的内容,还要遍历刚刚添加的新记录。

    解决方案是将循环和插入分离为离散的步骤:循环并保存要插入的值,然后在循环完成后插入。 假设值为字符串、数字、字符串、数字:

    Set rs1 = CurrentDb.OpenRecordset(initialquery, dbOpenForwardOnly)
    dim strQuery() as String
    dim intCounter as Long
    dim recordCount as Long
    intCounter = 0
    rs1.MoveLast
    recordCount = rs1.RecordCount
    Redim strQuery(0 to recordCount)
    rs1.MoveFirst
    strQuery(0) = "INSERT INTO FORMAL_CERT_PROCEDURE_TEST_SCRIPTS ([Test Script],[PROC_CHECK_ID_FK],[Software_Version],[TEST_CASE_ID]) VALUES "
    Do Until rs1.EOF = True
        intCounter = intCounter + 1
        strQuery(intCounter) = strQuery(0) & " ('" & rs1![Test Script] & "'," & _
            & rs1!PROC_CHECK_ID & "," & _
            & "'" & rs1![Software Version].Value & "'," & _
            & Me.TEST_CASE_ID & ")"
        rs1.MoveNext
    
    Loop
    
    For intCounter = 0 To recordCount
        CurrentDb.Execute(strQuery(intCounter))
    Next
    

    这将避免 EOF 指针在您插入时移动得更远的问题。

    编辑:我忘了你不能使用默认 DBA 进行多次插入,我更改了代码以反映这一点。

    【讨论】:

      猜你喜欢
      • 2011-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-27
      • 2011-02-04
      • 1970-01-01
      相关资源
      最近更新 更多