2014年7月1日火曜日

[MS Access] リンクテーブルを動的に更新する。

実は負荷が高いAccessアプリケーションでリンクテーブルを処理中に頻繁に更新すると、

エラーメッセージ:「3276 DAO.QueryDef データベースのオブジェクト参照が正しくありません。」
http://answers.microsoft.com/ja-jp/office/forum/office_2010-access/access2010%E3%81%A7%E3%83%87%E3%83%BC%E3%82%BF/98c99dce-007d-e011-9b4b-68b599b31bf5
(指定した Database オブジェクトは、OpenDatabase メソッドで作成されたものではないか、または既に変更されているために無効になっています。)

という再現性が困難なエラーに悩まされることがあります。それには注意しつつ・・・
TableDef オブジェクトがリンクテーブルであることを判定するには、TableDefAttributeEnum 列挙体を使います。

以下は、リンクテーブルの接続先を切り替えるサンプル
Dim TableDef As DAO.TableDef
For Each TableDef In CurrentDb.TableDefs
    If TableDef.Attributes And TableDefAttributeEnum.dbAttachedTable Then
        TableDef.Connect = ";DATABASE=C:\work\Sample1.accdb"
    End If
Next

関連する資料のリンク

TableDefAttributeEnum 列挙 (DAO)
http://msdn.microsoft.com/ja-jp/library/office/ff194433.aspx

TableDef.Attributes プロパティ (DAO)
http://msdn.microsoft.com/ja-jp/library/office/ff834701.aspx