COMオブジェクトの解放

タグの編集
投稿者 熊造  (社会人) 投稿日時 2010/1/16 02:24:14
以前にもAccessのプロセスが残ることで相談させていただいたのですが

Dim acCon As New Access.Application
Dim acCmd As Access.DoCmd = acCon.DoCmd
    acCon.Visible = False 
    acCon.OpenCurrentDatabase("****.mdb")
    acCon.CurrentDb.CreateQueryDef("****", ****) 
    acCmd.OpenQuery("****")
    
    System.Runtime.InteropServices.Marshal.ReleaseComObject(acCmd)
    System.Runtime.InteropServices.Marshal.ReleaseComObject(acCon)

これを実行するとacCon.CurrentDb.CreateQueryDefが原因だと思うのですがプロセス
が残ってしまいます。 変数に受けないといけないと思いいろいろ調べたのですがわかり
ません。
クエリーなんか作らずoleDbでSQLを実行したりDAOを使ってクエリーを作ることもできますが
Docmdとの組み合わせだと途中で少し待機させたりしないとうまく動きません
この掲示板で何度も質問をしてしまって申し訳ないのですが宜しくお願いします

投稿者 魔界の仮面弁士  (社会人) 投稿日時 2010/1/16 02:40:56
> acCon.CurrentDb.CreateQueryDef("****", ****) 
CurrentDb から返されるオブジェクトを、As DAO.Database な変数に
受け取っておき、使用後に ReleaseComObject しましょう。

また、CreateQueryDef から返されるオブジェクトも同様に、
As DAO.QueryDef で受け取っておく必要があります。
投稿者 熊造  (社会人) 投稿日時 2010/1/16 07:50:59
魔界の仮面弁士さんありがとうございます。
うまくいきました