DOBON.NET DOBON.NETプログラミング掲示板過去ログ

プロセスが開放できない

環境/言語:[vista、VB.NET、.NET Framework3.5]
分類:[.NET]

2011/09/03(Sat) 14:23:18 編集(投稿者)


vbでaccessファイルを作成してテーブルを追加したいと思っています。
ファイル作成、テーブルは問題なく作成されるのですが、
プロセスが開放できず、accessの画面が残ってしまいます。
どなたか対処法をご教授願います。

ちなみに
vb2008
Access2000


Public Function fncCreateDataBase(ByVal mdbpath As String) As Boolean
Dim acApp As New Access.Application
Dim tf as boolean

acApp.Visible = False

Dim tdfNew As dao.TableDef

Try
acApp.NewCurrentDatabase(mdbpath)

'テーブルを作成
tdfNew = acApp.CurrentDb.CreateTableDef("inf")
With tdfNew
'フィールド設定
End with
acApp.CurrentDb.TableDefs.Append(tdfNew)

tf = true
Finally
If Not IsNothing(acApp) Then acApp.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(acApp)
System.Runtime.InteropServices.Marshal.ReleaseComObjec(tdfNew)
End Try

Return tf
End Function
■No28974に返信(nkさんの記事)

> System.Runtime.InteropServices.Marshal.ReleaseComObject(acApp)
> System.Runtime.InteropServices.Marshal.ReleaseComObjec(tdfNew)

このReleaseComObjectの順番は逆じゃないでしょうか?

あと、

> acApp.CurrentDb
> acApp.CurrentDb.TableDefs

なども変数に入れて、この変数をReleaseComObjectしないといけないのではないかと思います。

それよりも、MDBファイルのテンプレートを用意し、Microsoft.Jet.OLEDBで接続してテーブルを作成することを検討した方がいいかもしれません。
ちーまるさん ありがとうございます

いろいろと試してみたのですが、どうしてもうまくいかなくて、
他の方法を探してみたところ ADOX を使う方法を発見しました。
こちらだとAccessアプリケーションを開かないからうまくいく?ようです。

私の知識不足でご迷惑をお掛けしましたが、
いろいろと教えて頂いてありがとうございます。
勉強になりました。今後参考にさせていただきます。


http://anetm.com/dev/tools/vbdotnet/112260.htm
解決済み!
■No28980に返信(nkさんの記事)
> いろいろと試してみたのですが、どうしてもうまくいかなくて、
> 他の方法を探してみたところ ADOX を使う方法を発見しました。
> こちらだとAccessアプリケーションを開かないからうまくいく?ようです。
> http://anetm.com/dev/tools/vbdotnet/112260.htm

前回は 「プロセス」 という見ただけで解放漏れがわかる状態でした。
今回の ADOX を使う方法でもプロセスは居残らないだけで、根っこの COM の参照のデクリメントが必要である点は変わりません。

# 実害があるかどうかは作り次第ですが (すぐプロセス自体終わるなら実害にはならない)
# "うまくいく?" は少々御幣があるので書かせて頂きました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板