【Microsoft Access2003】

ACCESSのODBCリンクテーブルについてですが…
PCが2台あり、普段はPC1上のSQLサーバーに
接続するようになっています。
(リンクテーブルは複数あります。)
これを、一度にすべてのテーブルをPC2側に接続するように変更することは
できますか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2008/05/02 17:06:57
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:bmax No.3

回答回数67ベストアンサー獲得回数16

ポイント50pt

該当mdbにてモジュールを作成し、下記のコードを貼り付けて実行してください。

("ODBC;~~~"の部分は下記の方法でリンク先を取得して置き換えてください

どれでもよいのでPC2のテーブルへのリンクテーブルを作成します。
作成したリンクテーブルをデザインビューで表示して、そこからプロパティを表示します。
「説明」の項目の内容の「TABLE=」の前までをコピーします
コピーしたらこのリンクテーブルは破棄してください

)


ただし下記のコードを使うには以下の前提条件があります

(質問者様の環境の前提条件がわからなかったため)


1.PC1とPC2に存在するテーブル名は同一である

2.PC1とPC2のDBでテーブルの所有者(dbo)は同一

3.dbo.tablenameに対してリンクテーブルを作成するとリンクテーブル名はdbo_tablenameの形になりますが、そのまま変更していない

4.dbo名に"_"を含まない


※以上の条件に当てはまらない場合は下記マクロの該当処理を修正する必要があります

※リンクテーブルを削除→再作成しているので、mdbのバックアップを取ることをお勧めします

SUB LinkDBChange()

Dim db As DAO.Database
Dim td As DAO.TableDef
Dim tableName As String
Dim newTd As DAO.TableDef

Set db = CurrentDb
For Each td In db.TableDefs
  If Not CBool(td.Attributes And DAO.dbSystemObject) Then
    tableName = td.Name
    db.TableDefs.Delete td.Name
    Set newTd = db.CreateTableDef(tableName)
    newTd.Connect = "ODBC;~~~"
    newTd.SourceTableName = Mid(tableName,1,Instr(1,tableName,"_")-1) & "." & Mid(tableName,Instr(1,tableName,"_")+1)
    db.TableDefs.Append newTd
  End If
Next td

END SUB

http://q.hatena.ne.jp/1209603819

id:db_Magician

回答ありがとうございます。

1.PC1とPC2に存在するテーブル名は同一です。

2.PC1とPC2のDBでテーブルの所有者は同一です。

3.リンクテーブル名はリネームしています。

4.テーブル名に"_"を含む物があります。

3と4の箇所を修正してやってみます。

2008/05/02 09:26:41

その他の回答2件)

id:iwakaba No.1

回答回数8ベストアンサー獲得回数1

ポイント20pt

http://office.microsoft.com/ja-jp/access/HP051876231041.aspx

http://www.penhagi.com/access/ota2003/677.htm

ACCESS のリンクテーブルマネージャーで出来たと思います

どうでしょうか?

id:db_Magician

回答ありがとうございます。

リンクテーブルマネージャーを使ってみましたが、接続先PCが見つからない場合だけ

接続先設定画面が表示されました。

今回はPC1・PC2とも存在する状態でリンク貼り変えをする必要があります。

2008/05/02 09:20:01
id:ken33jp No.2

回答回数928ベストアンサー獲得回数13

ポイント20pt

テーブル構成がまったく同じなら、

ODBCの設定の接続先を変えるだけでOKです。

http://q.hatena.ne.jp/answer

id:db_Magician

回答ありがとうございます。

どうやって変えればいいのでしょうか…

2008/05/02 09:18:40
id:bmax No.3

回答回数67ベストアンサー獲得回数16ここでベストアンサー

ポイント50pt

該当mdbにてモジュールを作成し、下記のコードを貼り付けて実行してください。

("ODBC;~~~"の部分は下記の方法でリンク先を取得して置き換えてください

どれでもよいのでPC2のテーブルへのリンクテーブルを作成します。
作成したリンクテーブルをデザインビューで表示して、そこからプロパティを表示します。
「説明」の項目の内容の「TABLE=」の前までをコピーします
コピーしたらこのリンクテーブルは破棄してください

)


ただし下記のコードを使うには以下の前提条件があります

(質問者様の環境の前提条件がわからなかったため)


1.PC1とPC2に存在するテーブル名は同一である

2.PC1とPC2のDBでテーブルの所有者(dbo)は同一

3.dbo.tablenameに対してリンクテーブルを作成するとリンクテーブル名はdbo_tablenameの形になりますが、そのまま変更していない

4.dbo名に"_"を含まない


※以上の条件に当てはまらない場合は下記マクロの該当処理を修正する必要があります

※リンクテーブルを削除→再作成しているので、mdbのバックアップを取ることをお勧めします

SUB LinkDBChange()

Dim db As DAO.Database
Dim td As DAO.TableDef
Dim tableName As String
Dim newTd As DAO.TableDef

Set db = CurrentDb
For Each td In db.TableDefs
  If Not CBool(td.Attributes And DAO.dbSystemObject) Then
    tableName = td.Name
    db.TableDefs.Delete td.Name
    Set newTd = db.CreateTableDef(tableName)
    newTd.Connect = "ODBC;~~~"
    newTd.SourceTableName = Mid(tableName,1,Instr(1,tableName,"_")-1) & "." & Mid(tableName,Instr(1,tableName,"_")+1)
    db.TableDefs.Append newTd
  End If
Next td

END SUB

http://q.hatena.ne.jp/1209603819

id:db_Magician

回答ありがとうございます。

1.PC1とPC2に存在するテーブル名は同一です。

2.PC1とPC2のDBでテーブルの所有者は同一です。

3.リンクテーブル名はリネームしています。

4.テーブル名に"_"を含む物があります。

3と4の箇所を修正してやってみます。

2008/05/02 09:26:41

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません