使いやすいように設計された Microsoft リレーショナル データベース管理システムのファミリ。
最初にボタンやタブによるフィルター切替も試してみたのですが、実際には利用上煩わしかったため、
ユーザーの積極的に利用する意欲を削ぎかねないと判断し、これらの手法は不採用になってしまいました。
3つのフォームは常時表示しているということですね。
レコードセットを使い回すということですが、
まず、抽出条件を設定しないレコードセットを読み込む。
Cloneを作成して、Filterを設定する。
ということのようですが、
ヘルプには、
Filterで抽出するより、レコードセットを開くときに、SQLのWHERE句で抽出条件を設定したほうが高速だという記載があります。
これを考えたら、Filterを使うことでそれほど高速化されるとは思えません。
すなおに、サブフォームのレコードソースに抽出条件付きのクエリを設定すればいいのかなと、思います。
ReadOnlyで開いているようなので、フォームの「レコードセット」プロパティを「スナップショット」に設定しておけば、負荷も軽減できます。
あと、フォームを開くのを高速化する目的でしたら、私なら下記のような設計を採用するかな。
サブフォーム1のみソースオブジェクトを設定しておいて、
「タイマー時」のイベントで、サブフォーム2、サブフォーム3 のソースオブジェクトを設定する。
これなら、サブフォーム1 のレコードを読み込み終了と同時にメインフォームが表示されて、
その後、サブフォーム2、サブフォーム3のレコードが読み込まれる。
形になります。
ユーザーは無反応のまま長時間待たされるということは回避できます。
なお、Me.subfサブフォーム1.Form.Recordset に Recordsetオブジェクト(ADO) を Set するという構文は
問題無いでしょうか。Me.subfサブフォーム1.Form.Recordset はメソッドと認識されるのでしょうか。
私自身は、ADOレコードセットをフォームに連結することにメリットがあるとは思っていないので、実運用で採用したことはなく、この件に関しては、アドバイスできるものは持っていません。
他の方の回答をお待ち下さい。