メインフォームにサブフォーム(1つ)コントロールを配置しています。
メインフレームのヘッダでサブフォームのレコードセットを抽出するようなテキストボックスおよびコンボボックスなどを
配置して、更新後処置で、サブフォームのレコードソースのWhere条件を、都度、更新するようにしています。
サブフォームコントロールなので、更に、サブフォームのフィルタからも抽出が可能です。
そこで、ご相談させていただきたいのは、サブフォームに抽出されているレコードセットを特定する方法についてご教授いただけますでしょうか。
サブフォームのレコードセットは、メインフォームから取得するなら、
Me.サブフォームコントロール名.Form.Recordset
で取得できます。
ただ、あまり使う必要性がある場面は少ないと思いますが、具体的にはどのようなことをしたいのでしょうか。
サブフォームのFilterプロパティを使って抽出したいというのが目的なら、下記のようなコードで可能です。
お返事遅くなり申し訳ございません。
メインフォームにサブフォーム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
提示のコードで問題なさそうですが、解決済みということでいいでしょうか。
Recordsetの部分を RecordsetClone あるいは Recordset.Clone にした方が高速に処理はできます。詳細は、下記を参照してください。
フォームの Recordset, RecorsetClone, RecordSet.Clone の違いとは? - hatena chips
フィルターがかかっている場合、Filterプロパティに条件式が格納されてますので、それを使えばSQLは生成できると思います。リンクフィールド名が LinkFld で数値型なら、下記のような感じです。
hatena様
少し自信が無かったのですが、確認できて本当に助かりました。
なるほどです。Filterがされていた場合でもSQLは取得できるのですね。
勉強になりました。
解決とさせていただきます。
どうもありがとうございました。