Access 2003 VBA を使用して、製造 BOM の再帰データを処理しています。メイン テーブルに静的スコープを持たせるクラス モジュールを作成しました。これにより、再帰が単純化されているように思えます。これにより、BOM をトラバースするときにレベルをカウントダウンしたりカウントアップしたりする必要がなくなります。同じレコードセットを重複して開いているわけではありません。代わりにたくさんフィルタリングしています。
これを開始した後、オブジェクト リレーション モデリングについて読み、レコードセットではなくレコードをインスタンス化することにしました。次に、そのレコードのフィールドをプロパティにすることができます。多くの作業と多くの勝利のスリルを味わった後、Access はテーブルベースであるため、このアプローチには利点がないことに気付きました。
私のクラスモジュールは以前と同じように役立ちます。私の質問は、以下の 2 つの代替バージョンについてです。最初のものは 2 つのインスタンス (親、子) を使用します。2 つ目は 1 つを使用し、それを再利用します。明らかに、最初のものは ORM の影響を受けています。
これらのいずれかを選択する理由はありますか? また、最後のイタリック体の行に注意してください。それが必要ない場合 (親に関するこれ以上の情報は必要ないため)、答えは変わりますか? 一般的に私の考えを手伝ってくれる人はいますか?
(私はレコードセットを閉じますが、クラス インスタンスは閉じないことに注意してください。私の理解では、VBA インスタンスはそれ自体を閉じており、それを許可することは受け入れられている慣行です。私は疑似コードを新しいレベルの疑似レベルに引き上げたようです...目標は明快さです。できます。)
バージョン 1 プロパティ サブ ReviewPart ( Parent_Part_ID ) Parent_Part_ID を取得 クラスのインスタンスを作成 --> レコードセットを取得 フィルター クラス レコードセット ( Parent_Part_ID ) エクスプロイトクラスのレコードセット Parent_Part_ID に子があるかどうかを確認する そうであれば: Childs のレコードセットを開く お子様ごとに Child_Part_ID を取得 クラスのインスタンスを作成 --> レコードセットを取得 フィルター クラス レコードセット ( Child_Part_ID ) エクスプロイトクラスのレコードセット Child_Part_ID に子があるかどうかを確認する そうであれば: インスタンスの新しい ReviewPart ( Child_Part_ID ) さもないと: 何もない; 進め 次の子 Childs のレコードセットを閉じる さもないと: 進め Exploit Class レコードセット (依然として親を指している)
バージョン 2 プロパティ サブ ReviewPart ( Parent_Part_ID ) Parent_Part_ID を取得 クラスのインスタンスを作成 --> レコードセットを取得 フィルター クラス レコードセット ( Parent_Part_ID ) エクスプロイトクラスのレコードセット Parent_Part_ID に子があるかどうかを確認する そうであれば: Childs のレコードセットを開く お子様ごとに Child_Part_ID を取得クラスのインスタンスを作成 --> レコードセットを取得フィルター クラス レコードセット ( Child_Part_ID ) エクスプロイトクラスのレコードセット Child_Part_ID に子があるかどうかを確認する そうであれば: インスタンスの新しい ReviewPart ( Child_Part_ID ) さもないと: 何もない; 進め 次の子 Childs のレコードセットを閉じる さもないと: 進め フィルタ クラス レコードセット ( Parent_Part_ID ) エクスプロイト クラス レコードセット (依然として親を指している)