答えて
はい、ただし、レコードセット変数を別のレコードセットに再度割り当てる前に、レコードセットを閉じてください。ここでは一例です:この質問のコメントの
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
にレコードセット変数を設定する必要性に焦点を当てている、そして閉じるに呼び出すことも必要であるかどうかレコードセット参照を解放する前にレコードセット。このトピックに関する優れた解説は、スタックオーバーフローに関するかなりの質問に広がっています。 this oneは、あなたの状況に特に関係します。私はthis knowledgebase articleとthis in-depth book excerptにもあなたを導いてくれるでしょう。
アクセス制限の参照がうまくいっていれば、明示的に参照を解放するには、Nothing
に設定したり、明示的にレコードセットを閉じることを心配する必要はありません。 Howerverの実践的な経験から、Accessの振る舞いを考えると、これらの習慣はどちらもVBAをコーディングするベストプラクティスの一部でなければならないということがわかります。
実際、再利用する前に変数を閉じる必要はありません。 –
レコードセットを開いたままにしておくと、参照が失われるため、レコードセットを閉じることはできません。これは良くない。 –
どのような参照は失われますか?あなた自身でこれを試しましたか? –
はい、変数が2つのレコードセットを指しているとは限りません。
しかし、質問はなぜでしょうか?あなたは何を保存すると思いますか?リソース?大したことではありません。また、コードの可読性にも問題があります。あなたが今から1週間後に他の誰かがあなたのコードを見ているなら、何が起こっているのか分からないかもしれません。したがって、テーブル/クエリごとにレコードセット変数を提案します。
また、変数の範囲もあります。サブルーチン/関数で定義されている場合、そのサブ/ファンクションでのみ表示されます。一番上にあれば、フォーム/レポート/モジュール内のすべての関数/関数に表示されます。モジュール内でグローバルであると述べると、どこにでも表示されます。
質問はなぜですか?
複数の同一のテーブルから同じ操作をループして実行する必要がある場合は、レコードセット変数を再利用することができます。しかし、再び、もしそれらが同一であれば、それはなぜ別れているのですか? – BIBD
私は、新しいオブジェクトの変数を再利用することは、明らかに悪い習慣であると考えています。 CodeSlaveの例は関連しています。 –
Paul、CodeSlaveの具体的な例ですしかし、一般的には、同じサブルーチン/関数で同じ変数をコード内で混乱するように再利用するべきではないと言います。 –
- 1. 異なるソースファイルで同じ変数を使用するC++
- 2. 同じキー変数でレコード数が異なるテーブルの結合
- 3. 異なるデータベースで同じテーブルIDを使用する
- 4. どのように3つの異なる変数に同じ関数を使用できますか?
- 5. RESTで異なるヘッダーを持つ同じURIを使用できますか?
- 6. 同じマシンで異なるバージョンのレールを使用できますか?
- 7. 角2:異なる子コンポーネントで同じ親コンポーネントを使用できますか?
- 8. 同じdust.jsモジュールを異なるパーシャルで使用できますか?
- 9. 異なるGoogleプレイデベロッパーアカウントで同じAdMobアカウントを使用できますか?
- 10. 異なるUIViewControllerサブクラスを渡す同じメソッドを使用できますか?
- 11. 異なる変数で同じレートでループを反復する
- 12. 同じページの異なるセレクタで同じjQuery文を使用できますか?
- 13. ADOレコードセットと接続を使用して同じ#TEMPテーブルを更新する
- 14. 同じディレクティブを同じビューで使用し、異なるデータをバインドします
- 15. 同じ剣道UIグリッドに異なるエディタテンプレートを使用できますか?
- 16. 異なるJavaアプリケーションが同じjavaagentを使用できますか?
- 17. javascript関数で同じ変数とパラメータ名を使用できますか?
- 18. 2人の異なるユーザーが異なるアプリケーションで同じFacebookサードパーティIDを使用できますか?
- 19. 同じソケットで同じアプリケーションで異なるプロトコルを使用する
- 20. 複数のコントローラが、異なるdbcontextを使用して同じデータベースに同時にアクセスできますか?
- 21. QTでは、同じ名前で異なる引数を持つ2つのスロットを使用できますか?
- 22. 異なるURLで同じコンポーネントをリロードできますか?
- 23. 同じタイプのファブリックアクターには同じdllの異なるバージョンを使用できますか?
- 24. NHibernate - 異なるキーで同じテーブルへの複数のJOIN
- 25. Windowsで異なるシナリオで同じフォームを使用する
- 26. 複数のロガーで同じハンドラを使用できますか?
- 27. 同じフォームクラスの異なるインスタンスは、どのように異なるウィンドウクラススタイルを使用できますか?
- 28. 複数のテーブルで同じFKを使用しています。
- 29. データセットはレコードセットと同じです
- 30. 同じ値の変数litteralまたは変数を使用すると、ループの条件が異なります
あなたが何を求めているのかわかりません –
私たちにあなたがしようとしていることの例を示してください。 –
私はあなたがVBAスクリプト手続きを書いていると思います。私がしようとしているのは、最初のテーブルが終了したときにレコードセットに使用する "オブジェクト"変数をNullに設定することです。オブジェクトに関連付けられた割り当てられたリソースを解放し、同じテーブルまたは別のテーブルに関連付けられた別のクエリの結果を保持するように再初期化できます。 – hardmath