リンクテーブルの参照先データベース(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_商品」テーブルを見ていますが、あくまでサンプル用なので、実際に利用する際は、ここを書き換えて使ってください。