こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

アクセス2000の終了時にバックアップするマクロ

アクセス2000で家計簿を付けてます。終了時にcd-rwに自動的にバックアップするマクロを作りたいです。職場の業務システムはアクセス95を使っていて、自動的にバックアップが取れて便利です。私のアクセスの知識は簡単なマクロをマクロビルダで作れる位です。宜しくお願いします。

投稿日時 - 2002-12-02 02:12:37

QNo.418086

困ってます

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

メッセージボックスは単なるサンプルであって、バックアップの方法ではありません。

何のサンプルかと言うと、Accessは起動時に起こるイベントを取得できますが、終了時を取得することができません。
ですので、終了時を取得する方法を載せたのです。

MDBをまるまるバックを取るなら、、、
メッセージボックスの変わりに、FileCopyを実行してあげると、ファイルの複製ができます。下のサンプルでも、バックアップを行うところに書いてありますので、参考にしてください。




ご要望のVBのサンプルも載せておきます。
これは、フォームを利用していますが、ループを行って待機をしておりますので、あまりお勧めできる方法ではないかもしれません。


Private Const PROCESS_QUERY_INFORMATION = &H400&
Private Const STATUS_PENDING = &H103&
Private Const STILL_ACTIVE = STATUS_PENDING

Private Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" (ByVal lpFile As String, ByVal lpDirectory As String, ByVal lpResult As String) As Long
Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32.dll" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long

Private Sub Command1_Click()
  Const DEF_FILE As String = "c:\test.mdb"
  
  Dim strExeName As String * 1024
  Dim lngInstance As Long
  Dim strWk    As String
  Dim lngProcessId  As Long
  Dim lngProcessHandle  As Long
  Dim lngProcessExitCode As Long
  
  On Error GoTo PGMEND
  Me.Visible = True
  
  
  '関連付いたEXEを取得
  lngInstance = FindExecutable(DEF_FILE, vbNullString, strExeName)
  If lngInstance < 33 Then
    MsgBox "関連付いたEXEの取得失敗"
    GoTo PGMEND
  End If
  
  '起動
  strWk = Left$(strExeName, InStr(1, strExeName, vbNullChar) - 1) & " " & DEF_FILE
  lngProcessId = Shell(strWk, vbNormalFocus)
  If lngProcessId = 0& Then
    MsgBox "起動失敗"
    GoTo PGMEND
  End If
  
  '待機
  lngProcessHandle = OpenProcess(PROCESS_QUERY_INFORMATION, 0&, lngProcessId)
  Do
    Call GetExitCodeProcess(lngProcessHandle, lngProcessExitCode)
      
  Loop While lngProcessExitCode = STILL_ACTIVE
  Call CloseHandle(lngProcessHandle)
  
  'バックアップ
  FileCopy DEF_FILE, DEF_FILE & "." & Format(Now, "yyyymmddhhnnss")

PGMEND:
  Me.Visible = True
End Sub

投稿日時 - 2002-12-05 01:09:38

お礼

長文の回答有り難うございます。早速やってみます。感謝感激です。

投稿日時 - 2002-12-06 00:53:48

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

方法1・ACCESS内部で処理する場合

※フォームを作成
フォーム名:ダミーフォーム
  フォームの閉じる時にイベントを記載
  Private Sub Form_Close()
    MsgBox "フォームが閉じられます"
  End Sub

※マクロ1作成
アクション:フォームを開く
  フォーム名:ダミーフォーム
  ビュー:フォームビュー
  ウィンドウモード:非表示


※DBの起動時の設定でマクロ1を設定

※DBを再起動

※終了時に非表示のフォームが閉じられ、メッセージボックスが表示される



方法2・他のACCESSやVBなどから処理する場合
プログラムの知識が必要です。
必要であれば記載します。

投稿日時 - 2002-12-04 01:48:44

お礼

丁寧な回答有り難うございます。メッセージボックスを表示すると何故バックアップ出来るのか分からないです。理由を教えて下さい。VBも宜しかったら、書いて下さい。宜しくお願いします。

投稿日時 - 2002-12-04 14:47:14

あなたにオススメの質問