
こんばんは。
フォームにボタンを設置して、そのボタンをクリックすると
既存のアクセスファイルを開くようにしているのですが
そのアクセスファイルを終了させてもタスクマネージャーのプロセスタブの
MSACCESS.EXE*32
がいつまでも残ってしまいます。
VBのフォームを閉じると、MSACCESS.EXE*32は消えます。
VBのコードは、
Private Sub cmb_Access_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmb_Access.SelectedIndexChanged
Call AccessOpen()
End Sub
------------------------------
標準モジュール
Sub Access_Open()
Dim AccApp As Access.Application
Dim MyPath As String
MyPath = "C:\test.accdb"
AccApp = CreateObject("Access.Application")
AccApp.OpenCurrentDatabase(MyPath)
AccApp.Visible = True
AccApp.UserControl = True
AccApp = Nothing
End Sub
です。
VBのフォームから
test.accdbを開く→閉じるを繰り返してると、
プロセスが溜まってしまって、アクセスでエラーが起こります。
なので、VBからアクセスを開いて閉じてたら、
プロセスも終了させるようにしたいのですが、
どうすればいいでしょうか?
ご回答よろしくお願いします。

No.1ベストアンサー
- 回答日時:
VB 7.0 (=VB.NET 2002)以降のVisual Basicでは,それ以前のVisual Basicに比べ,COMの取り扱いが煩雑になっています。
・Nothingの代入はCOMの解放を意味しません。フィールド変数への代入などを除くと,通常無意味です
・COMのオブジェクトは,全て,確実に System.Runtime.InteropServices.Marshal.ReleaseComObject を呼び出して解放する必要があります
今回の場合,
> AccApp = Nothing
のかわりに,
System.Runtime.InteropServices.Marshal.ReleaseComObject(AccApp)
としてください。
これにより,IUnknown.Releaseが呼び出されて参照カウントが減少し,Accessへの参照がなくなります。
AccApp = Nothingは無意味なのですか。
System.Runtime.InteropServices.Marshal.ReleaseComObject(AccApp)
に変更して確認したら、ちゃんとタスクマネージャーから消えました!
ありがとうございました。大変参考になりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
タスクマネージャーのプロセス...
-
バックグラウンドのプロセスの...
-
プロセスのアタッチ・デタッチ...
-
プロセスIDの取得方法について
-
ADOでアクセスのレコードに...
-
IISがフリーズ
-
シェルで親プロセス終了時に子...
-
起動中のプロセスのメモリを書...
-
ウインドウのプロセス終了について
-
外部プロセスを終了したい!!
-
VB6.0 SHELLで起動...
-
VB.NETで起動したExcelの閉じ方...
-
非表示になったエクセルは?
-
sleep関数の精度について
-
API関数 GetExitCodeProcess
-
C#でのbatファイル実行結果取得
-
既存プロセスからプロセスのプ...
-
VBAで別プロセスのExcelのフル...
-
[C#]リモートコンピューターを...
-
Linux環境におけるgetprocs関数
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
プロセスのアタッチ・デタッチ...
-
非表示になったエクセルは?
-
C#でのbatファイル実行結果取得
-
Process.Startの戻り値を後で取得
-
タスクマネージャーのプロセス...
-
SendMessageが失敗するときがある
-
VB6.0 SHELLで起動...
-
Linuxでのスレッド間メッセージ...
-
vb.netでEXCEL起動がうまくでき...
-
explorer.exeが異様にメモリを食う
-
プロセスIDの取得方法について
-
IISがフリーズ
-
jdbcのプロセスの処理について
-
c言語でプロセスIDを調べたい
-
セマフォとmutexの違いは?
-
警告『 別のプロセスで使用され...
-
ADOでアクセスのレコードに...
-
OSPFでプロセスを分ける意義に...
-
Windowsでのfork方法
おすすめ情報