Microsoft Access を初めて使用します。
異なるテーブルで同じレコードセット変数を使用するにはどうすればよいですか?
Microsoft Access を初めて使用します。
異なるテーブルで同じレコードセット変数を使用するにはどうすればよいですか?
はい、変数が 2 つのレコードセットを指しているとは思わない限り、可能です。
しかし、問題は、なぜあなたはそうするのですか? 何を保存すると思いますか? 資力?大したことではありません。また、コードの可読性も低下します。あなたが今から 1 週間後、または後で誰かがあなたのコードを見たとしても、彼らは何が起こっているのか分からないかもしれません。したがって、テーブル/クエリごとにレコードセット変数をお勧めします。
また、変数のスコープもあります。サブルーチン/関数で定義されている場合、そのサブ/関数でのみ表示されます。上部にある場合、そのフォーム/レポート/モジュール内のすべての sou/機能に表示されます。モジュール内でグローバルであると宣言すると、どこでも表示されます。
だから質問は、なぜあなたは尋ねるのですか?
はい。ただし、レコードセット変数を別のレコードセットに再割り当てする前に、必ずレコードセットを閉じる必要があります。次に例を示します。
Dim rs As DAO.Recordset
Dim bTimeToChangeRecordsets As Boolean
Set rs = CurrentDb.OpenRecordset("Contacts")
'add business logic here'
If bTimeToChangeRecordsets Then
rs.Close
'setting to Nothing is not necessary here,'
'because setting to a new recordset instance has the '
'same effect on the variable reference count '
Set rs = CurrentDb.OpenRecordset("Comments")
End If
'more business logic'
rs.Close
Set rs = Nothing
この質問に対するコメントの多くは、レコードセット変数を に設定する必要性、Nothing
これが必要かどうか、いつ必要か、およびレコードセット参照を解放する前にレコードセットで Close を呼び出す必要があるかどうかに焦点を当てています。このトピックについては、スタック オーバーフローに関するかなりの数の質問にまたがる優れた解説がいくつかあります。これはあなたの状況に特に関連しています。また、このナレッジベースの記事とこの詳細な書籍の抜粋もご案内します。
単純化しすぎる危険を冒して、この問題を次のように要約できます。Access 参照カウントがうまく機能する場合、参照を に設定して明示的に解放したりNothing
、レコードセットを明示的に閉じたりすることを心配する必要はありません。ただし、実際の経験から、Access の動作を考えると、これらの習慣はどちらも VBA のコーディングのベスト プラクティスの一部であることがわかります。