hatena
hatena
2025/04/16 (水) 15:18:31
因みにフォームの表示分を対象に色々する場面が多いのですが、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
通報 ...