Accessで別のAccessファイルからインポート定義を移管

# 概要

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/728405e5-4ea6-7581-476d-4e4057a1c5de.png)

# よくないデプロイ例

例えば、テスト環境のAccessでcsvインポート定義を作ってテストしても…

本番環境へのデプロイ時に、本番環境のAccessで下記のような画面を出して…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/0a74210c-0766-dcbb-2d3e-cfdc98ee5661.png)

インポート定義を改めて作っていることがあったりします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/4aced770-b8c1-2da6-cf96-b064e269e9a4.png)

これではデプロイ時にプログラミングしていることになります。

下記画面で設定ミスや入力ミスも考えられます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/bd326831-733d-d309-54ec-076c0be6ef67.png)

このような本番環境で改めて作るようなやり方だと **テスト環境でインポート定義を作ってテストしている意味が無くなってしまいます** 。

**テスト環境作ったインポート定義をそのまま本番に移したい！**

# やり方

## システムオブジェクトの表示

移管元と移管先の両方でやっておきます。

『ナビゲーションオプション』。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/e20a20f7-725f-2e2c-57d7-270fda9e5b53.png)
『システムオブジェクトの表示』にチェック入れる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/1965b88a-be93-750d-d863-049f5d6180f4.png)

『MSysIMEXSpecs』『MSysIMEXColumns』テーブルにインポート定義の情報が入っています。
つまり、この2テーブルのレコードを丸ごと差し替えてあげることで定義の移管ができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/ad17dac3-ee17-60f3-1142-0b231bd40610.png)

## 移管先のレコード全削除

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/f91b5579-fdde-a92f-ed8c-057b5418e4fb.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/f1daaf17-3899-0fa7-50d6-cc87e195bf61.png)

## 移管元から移管先へレコード移す

移管元から移管先へ2テーブルをドラッグドロップ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/59cf460b-7867-ca5f-51df-e1fefb4c9ffd.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/67bc6762-9c74-e01c-867c-13466b25f952.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/4c50cd20-9538-b933-79d3-2f1060df626f.png)

## 補足

『テーブル構造とデータ』だと下記のような例外になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/28e5e1bd-1fcb-51e3-2c6f-3f2f0749709f.png)
なので、事前に移管先のレコードを全削除しておいて、『既存のテーブルにデータを追加』を行っています。

## システムオブジェクト非表示に

やり方は『システムオブジェクトの表示』の逆をすればよいので省略。

# 新しいデータソース経由の移管だと失敗することがある

下記のようにやり方もありますが…

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/ff90b05c-ce09-38b6-eab5-f3199f87f8e8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/db16040c-90a7-cb1a-3480-09a2276d0efe.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/935fae7e-08c5-4b6c-3134-875a18e9fab8.png)

このような例外になってしまうことがあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/b2086916-4b0b-0c07-7471-f9ca5e6cce59.png)

なのでこの記事ではシステムオブジェクトテーブルのレコード移管の方法を載せています。

# 参考サイトさん

https://zenn.dev/1060work/articles/4e42b2f02d9e83a24ac8

https://support.microsoft.com/ja-jp/office/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9-%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E7%8F%BE%E5%9C%A8%E3%81%AE-access-%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AB%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B-23aea08b-7487-499d-bdce-0c76bedacfdd

# バージョン

Microsoft Windows [Version 10.0.19045.3636]
Microsoft Access for Microsoft 365 MSO (バージョン 2310 ビルド 16.0.16924.20054) 32 ビット