mdbの最適化時エラー


いわ  2004-05-19 18:05:20  No: 83437  IP: [192.*.*.*]

お世話になります。
DBにmdbを使用したアプリケーションの終了時に
mdbの最適化を行いたく、
以下のロジックを組み込んでいます。

Private Sub cmdEND_Click()
'---DB
    Set 機器管理DB = Nothing
    Set KIKPDB = Nothing
        
    Dim dbsNorthwind As Database
    Dim OldName, NewName
    OldName = "c:\choketu\機器管理.mdb": NewName = "c:\choketu\機器管理B.mdb"
    Name OldName As NewName
    DBEngine.CompactDatabase NewName, OldName
    Kill NewName
'---終了
    frmメインメニュー.Hide
    End
End Sub

Nameでmdbのリネームの所でパス指定エラーになってしまいます。
パスはあっているのですが、mdbが使用中のために起こるようです。
    Set 機器管理DB = Nothing
としただけではmdbを解放した事にならないのでしょうか?
リネームできるように解放するにはどうしたらよろしいですか?
よろしくお願い致します。

編集 削除
たぁくん  2004-05-19 20:08:10  No: 83438  IP: [192.*.*.*]

機器管理DB.Close
でやってみたらどう?
機器管理DBのオブジェクトって何?

編集 削除
いわ  2004-05-19 21:16:57  No: 83439  IP: [192.*.*.*]

たぁくんさんありがとうございます。

機器管理DBは Database です。

早速試してみます。

編集 削除
だい  URL  2004-05-20 09:05:12  No: 83440  IP: [192.*.*.*]

今回のケースに当てはまるかはわかりませんが、もし、
データコントロール等非明示的に接続を行うコントロールを使用している場合は、
そのフォームを閉じない限り接続が切れないことがあります。
また、JetのWriteキャッシュやOSのWriteキャッシュ等影響で、
1秒以内のシビアなタイミングでは、こういう問題が起こりえます。
フォームを閉じて、別フォームのLoad時で、
もしくは、最適化用別Exeにて最適化を行うのが安全かもしれません。

#もちろん、他のユーザが使用中でないかどうかも確認する必要があります。

編集 削除
いわ  2004-05-20 13:46:33  No: 83441  IP: [192.*.*.*]

だいさんありがとうございます。

Closeはやってみた所結果は変わりませんでした。

機器管理DB.Close
Set 機器管理DB = Nothing

の後でmdbを見てみたのですが、
ldbが出来ていて解放されていない状態でした。

だいさんのおっしゃる方法で
別フォーム、別Exeで試してみたいと思います。
ありがとうございます。

編集 削除