質問: いつもお世話になっております。 MS Access2013を使用しています。 この度、システムファイルのテーブル【MSysRelationships】を編集したく存じます。 初めての質問なので、言葉が足りなかったりすると思いますが、何卒よろしくお願いいたします。 ### やりたいこと ・ソースのバージョン管理を作成しようとしていて、インポート・エクスポート時にテーブル定義の変更があった場合、リレーションシップの変更が必要になると思い、今回の作業にいたりました。 ★手順★ 1:パラメータクエリで退避テーブルにデータを吐き出す 2:該当行を削除 ←ここでエラー発生 3:テーブルのインポート 4:該当行追加 こちらの手順を考えています。 ### 発生している問題・エラーメッセージ ``` エラーメッセージ 実行時エラー3109 MSysRelationshipsの削除権限がないので、レコードを削除できません。 ###該当のソースコード ``` クエリー(下記にSQLで記載します) PARAMETERS ParaName Text ( 255 ); DELETE MSysRelationships.ccolumn, MSysRelationships.grbit, MSysRelationships.icolumn, MSysRelationships.szColumn, MSysRelationships.szObject, MSysRelationships.szReferencedColumn, MSysRelationships.szReferencedObject, MSysRelationships.szRelationship FROM MSysRelationships WHERE (((MSysRelationships.szRelationship) Like "*" & [ParaName] & "*")); ### 試したこと ・MSysObject等別のシステムファイルも同様のエラー表記となる ・手動でレコードの編集はできあたが、削除、追加ができなかった (手動時ファイル名変更で、システム管理者またはこのオブジェクトの作成者から権限を取得してください。とメッセージが表記)
回答: 「ソースのバージョン管理」というのが具体的に何のことが把握できてないのですが、 システムテーブルを参照するのはまだしも、通常は非表示のシステム関連のものを編集するのは危険だと思います(できたとしても)。 やりたいことは、リレーションシップの削除、作成、ということですよね。 なら、DAOの CreateRelationメソッド、Relations.Deleteメソッドなどで可能ですので、そちらでやられた方が安全、確実だと思います。 Database.CreateRelation メソッド (DAO) Relations.Delete メソッド (DAO)