質問

なぜ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について薄暗い生?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top