为什么即使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
答案 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怎么样?