- - PR -
ODBCの矛先変更について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-01-13 15:38
こんにちは。
Accessについてお知恵を拝借したいと思います。 Access2000でODBCでOracle8にテーブルをリンクしているのですが、 Oracleをバージョンアップするので、接続先を変更したいのですが、 一括で変更する方法はあるのでしょうか? # MSysObejectテーブルのConnectカラム値を更新できればよいのですが、 # 読み取り専用で更新できないようです。 どなたか、ご存知の方がいらっしゃったら、ご返信いただけるとありがたいです。 |
|
投稿日時: 2006-01-14 01:21
DAOのTabledefsコレクションでconnectプロパティが"ODBC;"で始まるテーブルについて、そのTabledefオブジェクトのConnectプロパティの内容を新しいODBC接続文字列に変更し、RefreshLinkメソッドで更新を行うという方法でいけると思います。
"いけます"でなくて"思います"なのは、ODBC接続のPostgreSQLのテーブルへのリンクを作成したり、外部MDBファイルのテーブルリンクのパスを更新したことはありますが、ODBC接続のデータソースのリンクテーブルを書き換えたことがないためです。 |
|
投稿日時: 2006-01-14 01:35
PostgreSQLで確認したところ、↓でも動きました。
ACCESSのリンク機能で作られた元のconnectプロパティの内容は、DSNのパラメータをすべて展開しているようですが、"ODBC;DSN=test2"だけでもリンクテーブルおよびそれを使ったクエリも動作しているように見えます。 Public Sub ChangeODBCLink() Dim connectString As String connectString = "ODBC;DSN=test2;UID=postgres;PWD=xxxx" Dim tdf As TableDef Dim db As Database Set db = CurrentDb For Each tdf In db.TableDefs If tdf.Attributes = dbAttachedODBC Then Debug.Print "old: "; tdf.Connect; tdf.Connect = connectString tdf.RefreshLink Debug.Print " new:"; tdf.Connect End If Next End Sub |
|
投稿日時: 2006-01-16 10:54
鎌田様
ご返信ありがとうございました。 私も、以下のようにして矛先変更ができたのですが、 鎌田様のサンプルのほうがスッキリしているようです。 試してみます。 -------------------------------------------------------------------- SELECT MSysObjects.Connect, MSysObjects.ForeignName, MSysObjects.Id, MSysObjects.Name FROM MSysObjects WHERE MSysObjects.ForeignName IS NOT NULL; でForeignNameとNameを配列(s_ForeignName(n), s_Name(n))に保存して、 下記のように対処しました。 FOR ... DoCmd.TransferDatabase acLink, "ODBC データベース", _ "ODBC;DSN=xxx;UID=xxxxx;PWD=xxxxxxx;" & _ "DATABASE=zzz", acTable, s_ForeignName(n), s_Name(n) NEXT ... -------------------------------------------------------------------- |
1