使用循环从表中删除行

时间:2009-11-11 15:57:40

标签: ms-access vba loops recordset

为什么即使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

4 个答案:

答案 0 :(得分:3)

您正在进行按行分类行或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

答案 1 :(得分:2)

我不确定,或者是VBA专家,但你怎么会经常做一个MoveFirst?你永远不会在记录集中前进。尝试

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

答案 2 :(得分:0)

我不是VB程序员,但看起来'raw'即使在执行'MoveFirst'之后也会继续掉线。

答案 3 :(得分:0)

Dim raw AS DAO.Recordset怎么样?