Microsoft Access 掲示板

サブフォームで抽出されたレコードセットを取得

5 コメント
views
4 フォロー

メインフォームにサブフォーム(1つ)コントロールを配置しています。
メインフレームのヘッダでサブフォームのレコードセットを抽出するようなテキストボックスおよびコンボボックスなどを
配置して、更新後処置で、サブフォームのレコードソースのWhere条件を、都度、更新するようにしています。

サブフォームコントロールなので、更に、サブフォームのフィルタからも抽出が可能です。

そこで、ご相談させていただきたいのは、サブフォームに抽出されているレコードセットを特定する方法についてご教授いただけますでしょうか。

kazu
作成: 2022/11/28 (月) 18:00:37
通報 ...
1

サブフォームに抽出されているレコードセットを特定する方法についてご教授いただけますでしょうか。

サブフォームのレコードセットは、メインフォームから取得するなら、
Me.サブフォームコントロール名.Form.Recordset
で取得できます。

ただ、あまり使う必要性がある場面は少ないと思いますが、具体的にはどのようなことをしたいのでしょうか。

2

サブフォームコントロールなので、更に、サブフォームのフィルタからも抽出が可能です。

サブフォームのFilterプロパティを使って抽出したいというのが目的なら、下記のようなコードで可能です。

Me.サブフォームコントロール名.Form.Filter = "抽出条件式"
Me.サブフォームコントロール名.Form.FilterOn = True
3

お返事遅くなり申し訳ございません。

メインフォームにサブフォーム1があり、サブフォーム2がサブフォームに連動(親/子フォールドで連結)されています。ヘッダにある検索条件でサブフォームのデータを抽出します。その状態で、抽出済みのレコードに対して、
対象フラグというYes/No型のフィールドにチェックをするというコマンドボタンのアクションで、チェックを付すロジックでのご相談です。検索フィールドでの選択の値を拾えばSQLは再現できるのですが、サブフォームコントロール状で、
直接フィルタをされた場合、SQLが生成できないため、一応、このような方法で検討しています。

Private Sub 全て選択_Click()

    CurrentDb.Execute "update Qry_対象者 set 対象フラグ=false", dbFailOnError

    Set rs = Me.Controls("subForm1").Form.Recordset

    Me.Painting = False

    rs.MoveLast
    rs.MoveFirst

    Do Until rs.EOF

        rs.Edit
            rs![対象フラグ] = True
        rs.Update

        rs.MoveNext

    Loop

    Me.Painting = True

    Me.Controls("subForm1").Form.Requery

End Sub

4

提示のコードで問題なさそうですが、解決済みということでいいでしょうか。

Recordsetの部分を RecordsetClone あるいは Recordset.Clone にした方が高速に処理はできます。詳細は、下記を参照してください。

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

検索フィールドでの選択の値を拾えばSQLは再現できるのですが、サブフォームコントロール状で、直接フィルタをされた場合、SQLが生成できないため、このような方法で検討しています。

フィルターがかかっている場合、Filterプロパティに条件式が格納されてますので、それを使えばSQLは生成できると思います。リンクフィールド名が LinkFld で数値型なら、下記のような感じです。

Dim stSQL As String 
With Me.subForm1.Form
    stSQL = "update Qry_対象者 set 対象フラグ=true where LinkFld =" &  !LinkFld & " And (" & .Filter & ");"
End With
5

hatena様

少し自信が無かったのですが、確認できて本当に助かりました。
なるほどです。Filterがされていた場合でもSQLは取得できるのですね。
勉強になりました。

解決とさせていただきます。
どうもありがとうございました。