gooドクター有料プランが1ヶ月間無料!

Access2010をつぎのような環境で開発しています。

c:\開発\データ.accdb  テーブル定義と実データ格納
c:\開発\アプリ.accdb  データ.accdbのテーブル定義へのリンクとフォームなど

これを本番のネットワーク環境 “\\network\本番” に設置した場合、
「c:\開発\データ.accdbは無い」旨のエラーになってしまいます。
また、本番環境のパス名はインストール先によって異なります。

Access2010のリンクマネージャでは絶対パスでのリンクしか定義できないようですが、
カレントパスに変更するには、アプリ.accdb を起動時に毎回、動的に変更するしかないのでしょうか?

お教えいただきたくお願いいたします。

gooドクター

A 回答 (3件)

リンク先が変われば起動時に毎回変更するしかないでしょうね



全てのリンク先がわかっていればテーブルにパスを保存し、アプリ起動時に確認して必要なら自動でリンク変更は出来ますが、そうでなければパスは入力(設定)が必要です
    • good
    • 0

データ.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 のバックアップも抜かりなく。

この回答への補足

ありがとうございます。
質問内の アプリ.accdb は初期処理として業務選択メニュフォームを表示していますが、formload 時にお教え頂いたモジュールを実行することで求めていたことが実現できました。
また、ご回答でもご指摘のとおり、リスク回避やパフォーマンス向上のためのあるべき姿としてアプリ.accdbを共有フォルダにおくべきでないことも十分理解できました。
しかしながら、アプリ.accdbとデータ.accdbを同一フォルダにおかない場合、当該モジュールの方法ではパスの変更が実現できなくなります。
開発と本番の動作環境が異なることは、ごく自然なことと思いますが、Accessでの開発においては、本番環境移行時にリンクの絶対パスを書き換えるか、またはパス設定テーブル風なものを用意して、起動時にそれを参照するなどが、一般的なのでしょうか?
それとも、もっと基本的なセオリーがあるのでしょうか?
重ねてお教え頂きたくお願いいたします。

補足日時:2012/05/11 14:58
    • good
    • 3

>アプリ.accdbとデータ.accdbを同一フォルダにおかない場合


同一フォルダに置いてリンク先を更新。それから配布。Or
開発・本番環境のPathをテーブルに保存しておき更新。
ではないでしょうかね。
アプリから複数のデータファイルにリンクを張っている場合は後者。
テーブル名|本番Path|開発Path

バグ取りや機能追加を行って再配布の場合には
どこか(テーブルかファイルのプロパティなど)にバージョン情報をおいて
アプリの起動時にチェック。
別のプロセス(VBSや更新.accdbなど)を立ち上げて自身は終了。
更新処理(ユーザーへのコピー?)が終わったら新アプリを起動。
のように行っていました。
(当初はメール告知だけだったのですが替えてくれない方が多かった)
(その他にも色々と・・・)

基本的なセオリーは独学のため、よく分かりませんが、
確実・安全・・を考えて行ってみてください。
なお、当方は社内用のモノしか作成したことが有りませんので
社外用やネットワークで繋がっていない場合に関しては門外漢です。
以上、ご参考まで。
    • good
    • 2
この回答へのお礼

重ねてのご回答、ご丁寧にありがとうございました。
大変、助かりました。

お礼日時:2012/05/14 13:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング