Chapter5-9 | フォームのレコードソースの操作 | |||||||
VBAでは、テーブルやクエリを開いてのレコード操作だけでなく、フォームに表示されているレコードソースの操作も行うことができます。その場合には、フォームオブジェクトの「Recordset」または「RecordsetClone」を操作します。 これらの操作方法はRecordsetオブジェクトと基本的に同じです。しかし、RecordsetとRecordsetCloneには次のように微妙な違いがあります。
■Recordsetを次レコードへ移動させるといっしょに画面上のレコードも移動します Private Sub cmd01_Click()
With Me!frm書籍情報_sub With .Form .Recordset.MoveNext Me!txtRecNum = .CurrentRecord MsgBox .Recordset!タイトル End With MsgBox !タイトル End With End Sub ※「CurrentRecord」プロパティはフォーム上の現在のレコード番号を返します。ここではそれをあるテキストボックスに代入しています。 ■Recordsetオブジェクトと同じAddNewメソッドで新規レコードへ移動します Private Sub cmd02_Click()
Me!frm書籍情報_sub.Form.Recordset.AddNew End Sub ■Recordsetオブジェクトと同じDeleteメソッドで画面上のカレントレコードを削除します Private Sub cmd03_Click()
Me!frm書籍情報_sub.Form.Recordset.Delete End Sub ■Recordsetオブジェクトと同じEditメソッドとUpdateメソッドで画面上のカレントレコードを更新します Private Sub cmd04_Click()
With Me!frm書籍情報_sub.Form.Recordset .Edit !価格 = 3000 .Update End With End Sub ■Recordsetのレコード移動を繰り返すことで、画面上のレコードもいっしょに移動します。 しかしループのスタート位置は画面上のカレントレコードですので、そのまま開始したのでは全レコードを更新することはできません。MoveFirstメソッドでいったん先頭レコードに戻してからループ処理を行なわなければなりません。Recordsetの場合、画面もいっしょに動くので、このようなループは見た目が少々見苦しくなります。 Private Sub cmd05_Click()
With Me!frm書籍情報_sub.Form.Recordset MsgBox !タイトル Do Until .EOF .Edit !価格 = !価格 + 10000 .Update .MoveNext Loop End With MsgBox "すべての価格が10000円プラスされましたか?", vbOKOnly + vbInformation With Me!frm書籍情報_sub.Form.Recordset .MoveFirst MsgBox !タイトル Do Until .EOF .Edit !価格 = !価格 + 10000 .Update .MoveNext Loop End With MsgBox "すべての価格が10000円プラスされましたか?", vbOKOnly + vbInformation End Sub ■次の処理を何度か繰り返すとフォーム上のレコードはそのままでRecordsetCloneだけが次レコードへ進んでいくのが分かります Private Sub cmd06_Click()
With Me!frm書籍情報_sub With .Form .RecordsetClone.MoveNext Me!txtRecNum = .CurrentRecord ←この値は変化しない MsgBox .RecordsetClone!タイトル End With MsgBox !タイトル End With End Sub ■RecordsetCloneでEditメソッドを実行すると、フォーム上のレコード位置に関係なく、RecordsetClone上のカレントレコードだけが更新されます Private Sub cmd07_Click()
With Me!frm書籍情報_sub.Form.RecordsetClone .Edit !価格 = 3000 .Update End With End Sub ■全レコードに対して処理を行なう場合にはRecordsetCloneもいったん先頭レコードに戻してからループを開始します RecordsetCloneのレコード移動ではフォーム上のカレントレコードは移動しませんので、スムースにデータが一括更新されたように見えます。 Private Sub cmd08_Click()
With Me!frm書籍情報_sub.Form.RecordsetClone .MoveFirst Do Until .EOF .Edit !価格 = !価格 - 10000 .Update .MoveNext Loop End With End Sub
|
||||||||
|
Copyright © T'sWare All rights reserved |