ACCESSのODBCリンクテーブルについてですが…
PCが2台あり、普段はPC1上のSQLサーバーに
接続するようになっています。
(リンクテーブルは複数あります。)
これを、一度にすべてのテーブルをPC2側に接続するように変更することは
できますか?
該当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://office.microsoft.com/ja-jp/access/HP051876231041.aspx
http://www.penhagi.com/access/ota2003/677.htm
ACCESS のリンクテーブルマネージャーで出来たと思います
どうでしょうか?
回答ありがとうございます。
リンクテーブルマネージャーを使ってみましたが、接続先PCが見つからない場合だけ
接続先設定画面が表示されました。
今回はPC1・PC2とも存在する状態でリンク貼り変えをする必要があります。
回答ありがとうございます。
どうやって変えればいいのでしょうか…
該当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
回答ありがとうございます。
1.PC1とPC2に存在するテーブル名は同一です。
2.PC1とPC2のDBでテーブルの所有者は同一です。
3.リンクテーブル名はリネームしています。
4.テーブル名に"_"を含む物があります。
3と4の箇所を修正してやってみます。
回答ありがとうございます。
1.PC1とPC2に存在するテーブル名は同一です。
2.PC1とPC2のDBでテーブルの所有者は同一です。
3.リンクテーブル名はリネームしています。
4.テーブル名に"_"を含む物があります。
3と4の箇所を修正してやってみます。