#692 | フォームのRecordsetとRecordsetCloneの違い | フォーム、VBA | |
フォームに表示されているレコードをVBAのプログラムで操作したい場合、フォームオブジェクトが持っているレコードセットを取得してそれを操作します。そのときの取得元には、似たオブジェクトとして『Recordset』と『RecordsetClone』の2つがあります。 上図のように、フォームのレコードソースとなっているテーブルやクエリと直結していることはどちらも同じです。しかし、「Recordset」の方は正にフォームに表示されているレコードそのものであり、一方の「RecordsetClone」はあくまでもフォームのレコードの”写し”のようなイメージのものであるという違いがあります。 ここでは、それらの動きについて具体的にどのような違いがあるかを説明したいと思います。 まず、例として次のようなフォームと、各コマンドボタンのクリック時イベントのプログラムを用意します。 Private Sub cmd次へ_Click() Dim rst As Recordset Set rst = Me.Recordset 'RecordsetClone rst.MoveNext Me!txtCurRecord = (rst.AbsolutePosition + 1) & " レコード目 : " & rst!商品名 End Sub Private Sub cmd更新_Click() Dim rst As Recordset Set rst = Me.Recordset 'RecordsetClone rst.Edit rst!商品名 = "あああああ" rst.Update End Sub Private Sub cmd追加_Click() Dim rst As Recordset Set rst = Me.Recordset 'RecordsetClone rst.AddNew rst!商品コード = "9999999999999" rst!商品名 = "いいいいい" rst.Update End Sub Private Sub cmd削除_Click() Dim rst As Recordset Set rst = Me.Recordset 'RecordsetClone rst.Delete End Sub 【Recordsetの場合】
■[次へ]ボタンをクリックすると、フォームの上のカーソルも次のレコードへ移動していき、画面上のカレントレコードの商品名が取得されていることが分かります。■[更新]ボタンをクリックすると、現在カーソルがある行の商品名が更新されていることを画面上で確認できます。 ■[追加]ボタンをクリックすると、レコードが表の一番下の新規行に移動するとともに、商品コードや商品名が追加されていることを画面上で確認できます。 ■[削除]ボタンをクリックすると、カーソルがあった1行が削除されていることを画面上で確認できます。このとき実際の動作では、マニュアルでレコード削除しようとしたときの削除確認のメッセージなどは表示されません。 【RecordsetCloneの場合】
※実際には「Set rst = Me.RecordsetClone」という書き方に変更してから操作します。■[次へ]ボタンをクリックすると、オブジェクト変数rstのレコードセット上ではレコード移動およびそのレコードの商品名が取得されていることが分かりますが、画面上のカレントレコードやカーソル位置など、見た目に変化はありません。 ■オブジェクト変数rstが3レコード目にある状態で[更新]ボタンをクリックすると、画面上で3レコード目の商品名が更新されていることを確認できますが、レコードのカーソル位置に変化はありません。 ■[追加]ボタンをクリックしても、画面上のカレントレコードやカーソル位置など、見た目に変化はないように見えますが、画面をスクロールして最終行を見てみると、新規レコードとして商品コードや商品名が追加されていることが分かります。 ■オブジェクト変数rstが3レコード目にある状態で[削除]ボタンをクリックすると、画面上の3レコード目が削除されていることを確認できますが、カーソル位置に変化はありません(この場合も削除確認メッセージは表示されません)。 以上のことをまとめると、その使い分けとして次のようなことが言えます。
補足
|
|||
|
Copyright © T'sWare All rights reserved |