- ベストアンサー
Accessのリンク先を相対パスにする方法
- Access2010を使っている場合、リンクマネージャでは絶対パスでのリンクしか定義できません。
- しかし、アプリ.accdbを起動時に毎回動的に変更することで、相対パスにすることが可能です。
- 具体的な手順については、本番のネットワーク環境に設置した場合のパス名を確認し、アプリ.accdbの起動時にそのパスを設定することが必要です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
データ.accdb と アプリ.accdb が同じフォルダ内にあって アプリ.accdb のリンク先を その同じフォルダ内のデータ.accdbに設定するのなら、 VBAになりますが、アプリ.accdb に(例は標準モジュールです) Sub reLink() Dim db As DAO.Database Dim tdf As DAO.TableDef Dim lnkPath As String Dim i As Integer lnkPath = CurrentProject.path Set db = CurrentDb For Each tdf In db.TableDefs If Len(tdf.Connect) <> 0 Then tdf.Connect = ";DATABASE=" & lnkPath & "\データ.accdb" tdf.RefreshLink End If Next db.TableDefs.Refresh End Sub というのを一回実行すればリンク先が変更されます。 ただ、アプリ.accdb も共有フォルダ内に置いて、みんなが使うのは、 アプリ.accdb が壊れる可能性が高まる。 アプリ.accdb のデータもネットワークを流れるのでパフォーマンスが良くない。 という点でお勧めできません。 アプリ.accdb は各ユーザーに配布して使ってもらった方が吉。 データ.accdb のバックアップも抜かりなく。
その他の回答 (2)
- nicotinism
- ベストアンサー率70% (1019/1452)
>アプリ.accdbとデータ.accdbを同一フォルダにおかない場合 同一フォルダに置いてリンク先を更新。それから配布。Or 開発・本番環境のPathをテーブルに保存しておき更新。 ではないでしょうかね。 アプリから複数のデータファイルにリンクを張っている場合は後者。 テーブル名|本番Path|開発Path バグ取りや機能追加を行って再配布の場合には どこか(テーブルかファイルのプロパティなど)にバージョン情報をおいて アプリの起動時にチェック。 別のプロセス(VBSや更新.accdbなど)を立ち上げて自身は終了。 更新処理(ユーザーへのコピー?)が終わったら新アプリを起動。 のように行っていました。 (当初はメール告知だけだったのですが替えてくれない方が多かった) (その他にも色々と・・・) 基本的なセオリーは独学のため、よく分かりませんが、 確実・安全・・を考えて行ってみてください。 なお、当方は社内用のモノしか作成したことが有りませんので 社外用やネットワークで繋がっていない場合に関しては門外漢です。 以上、ご参考まで。
お礼
重ねてのご回答、ご丁寧にありがとうございました。 大変、助かりました。
- nekoman2012
- ベストアンサー率33% (1/3)
リンク先が変われば起動時に毎回変更するしかないでしょうね 全てのリンク先がわかっていればテーブルにパスを保存し、アプリ起動時に確認して必要なら自動でリンク変更は出来ますが、そうでなければパスは入力(設定)が必要です
補足
ありがとうございます。 質問内の アプリ.accdb は初期処理として業務選択メニュフォームを表示していますが、formload 時にお教え頂いたモジュールを実行することで求めていたことが実現できました。 また、ご回答でもご指摘のとおり、リスク回避やパフォーマンス向上のためのあるべき姿としてアプリ.accdbを共有フォルダにおくべきでないことも十分理解できました。 しかしながら、アプリ.accdbとデータ.accdbを同一フォルダにおかない場合、当該モジュールの方法ではパスの変更が実現できなくなります。 開発と本番の動作環境が異なることは、ごく自然なことと思いますが、Accessでの開発においては、本番環境移行時にリンクの絶対パスを書き換えるか、またはパス設定テーブル風なものを用意して、起動時にそれを参照するなどが、一般的なのでしょうか? それとも、もっと基本的なセオリーがあるのでしょうか? 重ねてお教え頂きたくお願いいたします。