【问题标题】:access 2007 vba recordset.EOF loop returning back first record of set访问 2007 vba 记录集。EOF 循环返回集合的第一条记录
【发布时间】:2013-09-17 12:43:04
【问题描述】:

所以我试图从表中选择一些数据,然后循环遍历结果并将带有修改/附加数据的新记录插入到表中。我遇到的问题是,当我遍历我的记录集时,它似乎遍历了整个记录集,然后在退出之前返回到第一个集。

一个例子是我在表中有两条记录,当我进行选择时,它应该只插入两条记录,但由于某种原因它插入了 3 条,第一条重复两次

这是我的代码。

Dim rs1 As DAO.Recordset
Dim query1 As String
query1 = "select [Test Script] from TEST_SCRIPTS where TEST_ID= " & Me.TEST_ID & " "

Set rs1 = CurrentDb.OpenRecordset(query1)

If Not (rs1.EOF And rs1.BOF) Then

    rs1.MoveFirst
    Do Until rs1.EOF = True

         INSERT_INTO_TEST_SCRIPTS = "insert into TEST_SCRIPTS ([Test Script], TEST_ID) values (""" & rs1![Test Script] & """, " & Me.TEST_ID & ") "

            DoCmd.SetWarnings False
                DoCmd.RunSQL INSERT_INTO_TEST_SCRIPTS
            DoCmd.SetWarnings True

        rs1.MoveNext

    Loop
End If

rs1.Close
Set rs1 = Nothing

我是使用记录集的新手,这个问题一直困扰着我,感谢任何帮助。

谢谢

【问题讨论】:

  • 您是否 100% 确定您选择的数据中没有两次?
  • 是的,我什至删除了所有记录并压缩了数据库。我觉得我快疯了,因为我认为这应该可以工作

标签: sql vba ms-access eof recordset


【解决方案1】:

我认为您的代码也应该可以正常工作。

尝试将记录集设置为仅转发,也许会有所帮助

设置 rs1 = CurrentDb.OpenRecordset(query1, dbOpenForwardOnly)

除此之外,插入选择会更有效。

插入 YourTable (col1, col2) (Select col1, col2 From otherTable)

【讨论】:

  • 由于运行时错误,我不得不删除 rs1.MoveFirst,但之后一切正常。感谢您对如何提高查询效率的建议,谢谢 Elias!
  • 我忘了你不能使用它!没问题。为了将来参考,这里是不同的记录集定义-msdn.microsoft.com/en-us/library/office/…在指定游标类型下
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-15
  • 2015-02-09
  • 2023-03-10
  • 2014-05-12
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
相关资源
最近更新 更多