2020.1.28

リンクテーブルの参照先データベース(Accessファイル)をバックアップ(コピー)する方法

画面(フォームやクエリ)とデータ(テーブル)でAccessファイルを別々にした場合で、画面側に設定したリンクテーブルから参照先のデータファイルを特定して、ファイルをバックアップ(コピー)する方法です。

手動でファイルをコピーすれば終わりですが、それだと忘れてしまう場合があり、運用時にはそうもいかないので、VBAでバックアップする処理を埋め込んで日毎に保存しておくと安心です。

バックアップの方法

バックアップを実行する画面側のファイルの構成は以下の通りです。

ここからリンクテーブルの参照先を取得して、データファイルのバックアップ(ファイルコピー)を行います。

コードは以下の通り。


Public Function InitApp()
  Call Backup
End Function

Sub Backup()
  Dim fs As Object
  Set fs = CreateObject("Scripting.FileSystemObject")
  
  Dim dbs As Variant
  Set dbs = CurrentDb
  
  ' リンクテーブルの定義情報を取得
  Dim tdf As TableDef
  Set tdf = dbs.TableDefs("T_商品")
  
  ' 接続情報から参照先のパスを取得
  Dim strDataFilePath As String
  strDataFilePath = Mid$(tdf.Connect, InStr(tdf.Connect, ";DATABASE=") + Len(";DATABASE="))
  
  ' バックアップファイルのパスを作成([参照先のディレクトリ]\バックアップ\[ファイル名]_yyyy-mm-dd.[拡張子])
  Dim backupFilePath As String
  backupFilePath = _
      fs.GetParentFolderName(strDataFilePath) & "\" & _
      "バックアップ\" & _
      fs.GetBaseName(strDataFilePath) & "_" & _
      Format(Now(), "yyyy-mm-dd") & "." & _
      fs.GetExtensionName(strDataFilePath)

  ' バックアップファイルの存在チェック(存在するなら何もせずに終了)
  If fs.FileExists(backupFilePath) Then
      Exit Sub
  End If

  ' データファイルのコピー
  fs.CopyFile strDataFilePath, backupFilePath, True
  
End Sub

InitAppをAutoExecマクロから呼び出すなどして、アプリの起動時に実行されるように設定します。

また、実行する前に、データファイルが置いてあるフォルダに「バックアップ」フォルダを作成しておいてください。(または「バックアップ」フォルダがなければ作成する処理を追加)

参照先データファイルのパスを取得するために「T_商品」テーブルを見ていますが、あくまでサンプル用なので、実際に利用する際は、ここを書き換えて使ってください。

実行結果

上記のコードを実行すると、「バックアップ」フォルダ配下にコピーしたファイルが保存されます。

ファイルが存在すれば何もせずに終了しているので、その日の最初に起動した時のデータが残ります。

毎日実行すると、ファイルが結構溜まるので、上記のコードにローテーションの仕組みを追加すると、使い勝手が向上すると思います。

Access】関連記事