ループを使用して表から行を削除します
質問
なぜ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
解決
私は必ず、あるいはVBAの専門家ではないんだけど、どのように来る、あなたは常ににMoveFirstをやっていますか?あなたは、レコードセット内を前方に移動することはありません。試してみてください。
Do Until raw.EOF
raw.Delete
raw.MoveNext
Loop
他のヒント
あなたはロウ・バイ・苦渋-行またはRBAR(reebar)の操作を行っています。テーブルが大きいほど、より多くの時間が、これは取るつもりです。
ほとんどのデータベースはRBARsよりも効率的に作業することができます。私はあなたが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
私はVBプログラマではないんだけど、それは「生の」それはMoveFirstメソッド」を実行した後もループを通って落下保つために起こっているように見えます。
どのようにDAO.Recordset ASについて薄暗い生?
所属していません StackOverflow