【问题标题】:Deleting rows from a table using a loop使用循环从表中删除行
【发布时间】:2010-12-15 12:38:16
【问题描述】:

为什么我的Do Until 循环尝试运行raw.Delete,即使raw.EOF 是真的?如果我有一个空表,这会崩溃。为什么?

Dim raw As Recordset
Set raw = db.OpenRecordset("tblSampleRaw")

If raw.RecordCount > 0 Then
    raw.MoveFirst

    Do Until raw.EOF
        raw.MoveFirst
        raw.Delete
    Loop
End If

【问题讨论】:

    标签: ms-access vba loops recordset


    【解决方案1】:

    我不是 VB 程序员,但看起来即使在执行“MoveFirst”之后,“raw”也会继续退出循环。

    【讨论】:

      【解决方案2】:

      Dim raw AS DAO.Recordset 怎么样?

      【讨论】:

        【解决方案3】:

        您正在执行 Row-By-Agonizing-Row 或 RBAR (reebar) 操作。表越大,这将花费的时间越多。

        大多数数据库可以比 RBAR 更有效地工作。我建议您从 SETS 而非行的角度来考虑。

        我认为你应该用这个替换整个代码块:

        DoCmd.RunSQL "DELETE * FROM tblSampleRaw"
        

        为了回答的目的

        Dim raw As Recordset
        Set raw = db.OpenRecordset("tblSampleRaw")
        
        If raw.RecordCount > 0 Then
            raw.MoveFirst
        
            WHILE NOT raw.EOF or raw.BOF
                raw.MoveFirst
                raw.Delete
            Loop
        End If
        

        【讨论】:

        • 你可能是对的。但是 TRUNCATE 甚至会更快。我只是好奇为什么这个循环不起作用。
        • 如果您使用的是 Jet/ACE,它会将“DELETE * FROM table”处理为 TRUNCATE。
        • 我认为循环内部 .MoveFirst 应该是 .MoveNext 并且应该在 Delete 之后。
        • @David W. Fenton:“DELETE * FROM Table”中的 * 应该做什么。删除所有列而不是...什么?
        【解决方案4】:

        我不确定,还是 VBA 专家,但你为什么总是在做 MoveFirst?你在记录集中永远不会前进。试试

        Do Until raw.EOF
                raw.Delete
                raw.MoveNext
         Loop
        

        【讨论】:

        • 移动到第一条记录,删除它,那么第一条是什么?我希望的下一张唱片
        • 好吧,如果这是真的,那么您将永远不需要执行 MoveFirst,您会吗?您最初在循环之外执行此操作,因此您应该始终在第一条记录上。
        • 另外,我认为你在移动通过最后一条记录之前不会达到 EOF。
        • 你刚刚从我嘴里说出来的话! +1
        • 删除的记录不会从记录集中删除,除非您重新查询它。如果您在其他地方删除了在表单中显示记录选择器的记录,并且该记录的所有控件将保留在表单中,但在所有控件中都带有#DELETED,则您可以在 Access 中的连续表单或数据表表单中看到这一点。
        猜你喜欢
        • 1970-01-01
        • 2018-03-07
        • 2018-06-17
        • 2018-02-16
        • 1970-01-01
        • 2023-04-10
        • 1970-01-01
        • 2014-12-29
        • 2011-07-27
        相关资源
        最近更新 更多