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

タイトル Re: MS-ACCESSの解放が出来ません
投稿日: 2016/02/02(Tue) 19:03
投稿者魔界の仮面弁士
> VB6.0からVB2005への変換挑戦中の鈴木です

ご存知とは思いますが、VS2005 は、
  2011/04/12  メインストリームサポート終了
  2016/04/12  延長サポート終了
ということで、あと数ヶ月でサポート終了となる製品です。

2005 への変換と併せて、現行バージョンへの移行計画も
準備しておくことをお奨めします。


> MS-ACCESS(2003)の停止が出来なく困ってしまいました

DAO の参照設定が、PIA 版であることを確認しておいてください。
http://www.gizcollabo.jp/vbtomo/boards/vbqanda.php?do=spread&num=15630


なお、上記にも書いていますが、移行作業とはいえ、DAO の継続利用は
個人的にはお奨めしていません。とはいえ今回は DML ではなく DDL の操作なので、
DAO (または ACEDAO) を使うのも已む無しですかね。


> 記事NO.6555を見て.FIELDSを扱うのは解放が難しいと
(全角半角、大文字小文字の使い分けは適切に)


> DAODBEngine_definst
これは UpgradeSupport で提供される、DAO.DBEngine 型の変数ですね。


>  TDFNEW = DB.TableDefs.Item("DBDATA")
>  For CC = 0 To TDFNEW.Fields.Count - 1
>  If TDFNEW.Fields(CC).Name = "A区分" Then

ActiveX (COM) のオブジェクトを用いる場合、基本的には
「.」が二回続く記述は NG だと思ってください。解放されにくくなります。

かわりに、コレクションオブジェクトを変数に受けて

tblDefs = DB.TableDefs
tblNew = tblDefs("DBDATA")

flds = tblNew.Fields
fld = flds(CC)

のように扱うようにします。

そして、そのインスタンスがもう使われなくなった場合には、
ReleaseComObject メソッド(今回は MRComObject ですね)を呼び出してください。
ReleaseComObject に渡さなかったオブジェクトは解放が遅れることになります。


また、COM オブジェクトに対して With ステートメントを
利用することもお勧めしません。


それと、今回は使用されていないので問題ないのですが、
For Each も避けるようにしてください。For Each を使うと、
裏で IEnumerator のインスタンスが生成されることになるので、
使用するライブラリによっては、解放が難しくなるためです。


>  AppendDeleteField(TDFNEW, "APPEND", "A区分", dao.DataTypeEnum.dbText, 1)
ちなみに「dao.DataTypeEnum.dbText」でも「.」が複数記載されていますが、
こちらはプロパティやメソッドのための「.」ではなく、
 名前空間名.列挙型名.列挙値名
であるため、「.」が複数あっても大丈夫です。
(そもそも、列挙型の値は ReleaseComObject の対象とはならないため)

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

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