tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^5: DAOによるOpenDatabaseについて
投稿日: 2011/06/01(Wed) 20:54
投稿者魔界の仮面弁士
> ID.mdb を閉じるには rsID.Close: Set rsID = Nothing でいいのでしょうか
それは、レコードセットを閉じるコードです。
データベースを閉じるには、Database オブジェクトの Close メソッドを呼び出します。


データベースは 2 つ同時に開いているのですから、それを操作するには
Database 型の変数も 2 つ用意しておいた方が良いでしょう。そうすれば、
 db1.Close
 db2.Close
のようにして、それぞれを任意のタイミングで閉じることができます。

一応、変数に保持しておかなくとも、Databases コレクションから
再取得することはできますが…自分で管理しておいた方が便利かと。


ちなみに、こうしたコレクションに自動追加されるという動作は、Form も同じだったりします。
Forms コレクションというやつですね。
    Debug.Print Forms.Count     'ロードされているフォームの数
    Debug.Print DoEvents        '表示されているフォーム数

蛇足ですが:
 Set F = New Form2    'フォームを作成しただけでは、Forms.Count や DoEvents の値は変化しない
 Load F               'ロードされる事により、Forms.Count が +1 される。
 F.Show               'それが表示されると、DoEvents の値についても +1 される。
 F.Hide               '非表示状態になると、DoEvents の結果が -1 される。
 Unload F             'アンロードされると、Forms.Count も -1 される。
 Set F = Nothing



> set した順番に Close しないかぎり残っているのですね。
Set順と Close 順はこの場合、直接は関係ないかと。

重要なのは「使わなくなったら閉じる」という事です。
それが Database であれ Form であれ ファイルであれ。



> 変数と同じイメージで
db や rsID も変数ですよね。


> 代入したデータベースが換わったのにおかしいなと勘違いしていました。
これは管理上の問題に過ぎません。データベース以外でもあっても同じことが言えます。

たとえばファイル操作で、

Dim f As Integer
f = FreeFile()
Open "C:\a.txt" For Output As #f
'Close #f

f = FreeFile()
Open "C:\b.txt" For Output As #f

のようにした場合、a.txt と b.txt が同時に開かれることになります。

FreeFile からは、それぞれ 1 と 2 が返されるのですが、
変数 f を使いまわしたため、変数 f は 2 を指している状態です。

しかし、a.txt は閉じられていませんので、エクスプローラー等から
a.txt を削除することはできません。また、変数 f を使わずに
「Print #1, "テスト"」などのようにして書き込む事さえできます。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。