タイトル : 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, "テスト"」などのようにして書き込む事さえできます。 |