• ベストアンサー

処理終了後に実行したmdbファイルが削除できない

すいません。教えてください。 更新処理を行うmdbファイルを作成しました。 正常に処理が終了した場合、その実行したmdbファイルごと削除するようにしたいのですが、方法はありますか? ACCESS2003 VBAにて作成しいました。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.3

No.2です。一応ゴミプロ書いて確認してみたんですが、以下を投げるだけでも全部なくなりました。 Sub KillMDB() Dim sVBScript As String sVBScript = Left(CurrentDb.Name, Len(CurrentDb.Name) - InStr(1, StrReverse(CurrentDb.Name), "\", vbTextCompare) + 1) & "Killer.vbs" Close Open sVBScript For Output As #1 Print #1, "On Error Resume Next" Print #1, "Dim acApp, fso" Print #1, "Set acApp = GetObject(, ""Access.Application"")" Print #1, "acApp.Quit" Print #1, "Set acApp = Nothing" Print #1, "Set fso = CreateObject(""Scripting.FileSystemObject"")" Print #1, "fso.DeleteFile """ & CurrentDb.Name & """, True" Print #1, "fso.DeleteFile """ & sVBScript & """, True" Print #1, "Set fso = Nothing" Close #1 rc& = Shell("CScript " & sVBScript, vbHide) End Sub

freedom325
質問者

お礼

遅くなってしまって申し訳ございません。 たしかにこの方法なら削除できました。 本当に助かりました。ありがとうございます!

その他の回答 (2)

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

自殺マクロはExcelだと可能ですが、Accessでは聞いたことがありません。 仮にないとすると、No.1さんの書かれているように外から削除させるしかないのですが、以下の方法なら痕跡なく削除できるかもしれません。 1)Accessには「閉じるときに同じフォルダにあるvbsファイルがあれば削除する」というイベントマクロを仕込んでおく 2)更新正常終了時に、Accessから以下の内容のvbsファイルを同じフォルダに出力する  「今開いているAccessをGetObjectして閉じてから、削除する」 3)AccessからShellでvbsを実行する vbs実行中でもvbsファイルは削除できますから、お互いを削除しあって最後はなくなるというやり方です。 Excelだとうまく消えますが、Accessで実際に試してはいないです。

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

> 正常に処理が終了した場合、その実行したmdbファイルごと削除 すみません、「実行したmdbファイルごと」の意味を取り切れていないので、 場合分けして回答させて戴きます。 1)『更新処理を行う「aaa.mdb」、更新の対象「bbb.xxx」、更新により複製される   「ccc.xxx」の3つのファイルがあって、削除するのは「bbb.xxx」』の場合   (または、「bbb.xxx」は直接更新され、「ccc.xxx」は作成されない場合):  更新処理が終了して、「bbb.xxx」の参照などを一切行っていない状態なら、  「Kill」などで削除できます。   http://www.tsware.jp/tips/tips_303.htm   http://www.tsware.jp/tips/tips_113.htm 2)『ファイルの構成は上記の3つがあり、「bbb.xxx」と同時に「aaa.mdb」  も削除する』の場合:  実行中のmdbファイルは削除できないと思いますので(多分(汗))、「aaa.mdb」  によって「aaa.mdb」自体を削除することはできません。  「aaa.mdb」を削除したい場合は、それを削除するための「ddd.mdb」を作り、  更新処理の最後にそれを起動させるしかないと思います。  なお、「aaa.mdb」が確実に終了されている状態にするため、FormのTimer  イベントを利用するなどして、起動してから実際に削除を行うまでの間に  タイムラグを生じさせる必要があります。  ・・・この場合、「ddd.mdb」は削除できずに残ります(汗)

関連するQ&A