#678 リンク先DBファイルにFileCopyが使えないときの対処法 VBA

フロントエンドとバックエンドの2つのデータベースファイルを使っている状態で、フロントエンド側のプログラム操作で、バックエンドとしてリンクしているデータベースファイルを丸ごとコピーしてバックアップしたい場合があります。

そのような場合、「FileCopy」ステートメントを使って簡単に任意のファイルへコピーすることができます。

例:「DataDB.accdb」を「Backup\DataDB_BAK.accdb」にコピーする場合

FileCopy "d:\DataDB.accdb", "d:\Backup\DataDB_BAK.accdb"


しかし、リンクテーブルのデータを画面に表示させたりしていない(テーブルを開いていない)状態であればよいのですが、そうでない状態(自分のパソコンで開いていなくても他のパソコンでいずれかのテーブルを使っているような場合も含む)では、リンク先のデータベースファイルがロックされた状態になっており、「FileCopy」では『書き込みできません』エラーとなってコピーすることができません。


一方、そのような状況であっても、エクスプローラーでファイルをコピー&ペーストすることはできます。そのことから、VBAの「FileCopy」ではダメでも外側からファイルシステムとして操作するのであれば可能であることが分かります。

そこで、下記のように「FileSystemObject」オブジェクトの「CopyFile」メソッドを使うことで、上記問題を回避することができます。

Dim fso As Object

Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile "d:\DataDB.accdb", "d:\Backup\DataDB_BAK.accdb"
Set fso = Nothing

| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved