Microsoft Access 掲示板

SQLのWHEREのMe.filterが出来てない? / 8

13 コメント
views
8

因みにフォームの表示分を対象に色々する場面が多いのですが、SQL使わずDAOだけでも可能でしょうか? 

フォームに表示されているレコードはRecordsetプロパティで取得できますので、それを対象に更新すればいいですね。

    Dim rs As DAO.Recordset
    Set rs = Me.Recordset
    rs.MoveFirst
    Do Until rs.EOF
        rs.Edit
        rs!check = -1
        rs.Update
        rs.MoveNext
    Loop
    MsgBox "更新しました"

この方法はフォームに現在表示されているレコードを対象に更新しますので、SQLのようにWhere条件とか考慮せずに記述できるので楽です。

また、このコードだと、カレントレコードが先頭から最後まで移動しながら更新していきます。
レコード移動させたくない場合は、Set rs = Me.Recordsetの部分をSet rs = Me.RecordsetCloneとします。こうすればレコード移動せずに更新できます。

ただ、SQLで更新するのと比べると処理速度は遅くなります。ただし、フォームに表示されている件数が多くなければ体験できる差はでないでしょう。

この辺の詳細は興味があれば下記を参照して研究してみてください。

フォームの Recordset, RecorsetClone, RecordSet.Clone の違いとは? - hatena chips

通報 ...