2011/05/14

access2010 access2007 リンクテーブルの作成

リンクテーブル作成をコーディングするって話はどこにでも転がってる情報なのだが、リンク元が信頼できる場所にない場合にセキュリティに関する通知が出てしまうということについて。
信頼する場所にリンク先ファイルがあれば当然でないけど、必要以上に信頼する場所の追加とかセキュリティレベルをいじってしまうのはどうなんだろうと。
自分の場合、CreateTableDefメソッドを使っていたのだが、データのインポートエクスポートマクロアクション、Docmd.TransferDatabaseメソッドでもリンクテーブルを作成することができる。ただ、セキュリティに関する通知については挙動が異なる。RuntimeもしくはRuntimeモードと製品版とでも違うがあるようだ。いまさらだけどきっちりと確認はしてない。
Sub CreateLinkTable1()
    Dim db As DAO.Database, tbldf As DAO.TableDef
    Set db = CurrentDb
    Set tbldf = db.CreateTableDef("table1")
    tbldf.Connect = _
      ";DATABASE=\\ServerName\SharedFolder\targetDb.accdb;TABLE=table1"
    tbldf.SourceTableName = "table1"
    db.TableDefs.Append tbldf
    Set tbldf = Nothing: Set db = Nothing
    Application.RefreshDatabaseWindow
End Sub

Sub CreateLinkTable2()
    DoCmd.TransferDatabase acLink, _
                "Microsoft Access", _
                "\\ServerName\SharedFolder\targetDb.accdb", _
                acTable, _
                "table1", _
                "table1"
End Sub
DoCmd.TransferDatabaseだとリンク先が信頼できる場所にない限りセキュリティに関する通知は出現する。
データのインポート/エクスポートマクロアクションの場合、製品版での実行であればセキュリティに関する通知は出ない。Runtime版もしくはRuntimeモードだと出る。
CreateTableDefメソッドの場合、セキュリティに関する通知は出ない。
確認してないけど、access2007でも同じような気がする。確認したら同じだった。
追記>>
TableDef.Connectプロパティ変更後、TableDef.RefreshLinkメソッドで更新する場合もセキュリティに関する警告はでない。ADOXでリンク先変更も同じくでない。

2 件のコメント:

なかむら さんのコメント...

この問題に関する情報がほかになく、とても助かりました。
ありがとうございました。

MukkuMuku さんのコメント...

どういたしまして~