Access

Accessのインポート定義を編集する方法

インポート定義編集

AccessにExcelファイル・CSVファイルからデータをインポートする際は、インポートするデータの形式をフィールド毎に指定することができます。

一時的な対応であれば毎回指定しても良いのですが、定期的に実行する運用の場合、定義を予め保存しておいて呼び出すだけの方が効率的です。

そのための定義が「インポート定義」です。

通常、Accessのウィザード通りに定義を保存すれば次回からインポート定義を呼び出すだけで即インポートを実行できるのですが、項目が追加になった場合や型を変更したい場合、インポート定義が不要になった場合などどうすれば編集できるのでしょうか?

この記事ではウィザードを利用せずに「インポート定義」の編集、確認する方法を紹介します。

既存のテーブルに追加でインポートする場合、ウィザードでフィールド型が表示されない現象に遭遇しています(Access2007)。こういった場合にもインポート定義を直接編集できると便利です!

ナビゲーションウィンドウにシステムオブジェクトを表示する

ナビゲーションオプションナビゲーションウィンドウのヘッダー行を右クリックしてナビゲーションオプションから「システムオブジェクトを表示」にチェックをつけます。

ナビゲーションオプション

尚、Accessのオプションからカレントデータベース→ナビゲーションオプションボタンクリックでもシステムオブジェクトを表示できます。

インポート定義が保存されているテーブルの確認

インポート定義が格納されているテーブルは以下の2つです。

  • MSysIMEXSpecsテーブル
  • MSysIMEXColumnsテーブル

MsysIMEXSpecsテーブルが定義のマスタで、MSysIMEXColumnsテーブルががインポート項目の各フィールド定義となっています。
いわゆる「1:多」のテーブル構成です。

リレーション

上記のテーブルの各フィールド構成は以下の通りです。

テーブル名:MSysIMEXSpecsテーブル

フィールド名 KEY 概要
DateDelim 日付区切り記号
DateFourDigitYear 西暦を4桁で表示
DateLeadingZeros 日付に0を表示
DateOrder 日付のソート順
0:”日月年”、1:”日年月”、2:”月日年”、
3:”月年日”、4:”年日月”、5:”年月日”
DecimalPoint 小数点記号
FieldSeparator フィールドの区切り文字
FileType 文字コード
SpecID オートナンバー型の定義ID
SpecName インポート定義の名称
SpecType ファイル形式
1:区切り記号付き、2:固定長、4:HTML
StartRow 0:先頭行をフィールド名として使わない、
1:先頭行をフィールド名として使う
TextDelim 文字列の引用符
TimeDelim 時刻区切り記号

テーブル名:MSysIMEXColumnsテーブル

フィールド名 KEY 概要
Attributes ハイパーリンク型の場合 dbHyperlinkField、他は 0
DataType 1:Yes/No型
2:バイト型
3:整数型
4:長整数型
5:通貨型
6:単精度浮動小数点型
7:倍精度浮動小数点型
8:日付/時刻型
10:テキスト型
11:OLEオブジェクト型
12:メモ型
FieldName フィールド名
IndexType 0:インデックスなし
1:重複ありインデックス
2:重複なしインデックス
SkipColumn インポートをスキップするかどうかのフラグ
0:スキップしない
-1:スキップする(=インポートしない)
SpecID インポート定義のキー
Start 固定長の場合、開始位置
Width 固定長の場合、文字数

インポート定義テーブルのリレーション

2つのテーブルはSpecIDを連結キーとして構成されています。

これらのテーブルを直接編集することでインポート定義の編集が可能です。

親テーブル(MSysIMEXSpecs)のSpecName(テキスト型)が主キーになっていて、SpecID(数値型)で結合するって、ちょっと不自然な気がするのは私だけでしょうか・・・。

インポート定義を編集する

インポート定義を削除する際は、多側(MSysIMEXColumnsテーブル)のデータから削除しましょう。(※1側から削除してもエラーにはなりませんが念のため・・・)

Accessのウィザードで定義を変更するとSpecIDは一旦削除され(両テーブル)、新たなSpecIDが採番されます。

おまけ

色々不思議なことが起こりますが、ウィザードでインポート時、型エラーでインポートできな事象が発生しました

日付の値【2018年8月6日 17時06分23秒】が入った項目をテキスト型のフィールドにインポートする予定でした。

インポート定義は正しく設定しているので型エラーの意味が分かりませんでしたが、ウィザードの2ページ目でインポート定義を適用させることでエラーが発生しなくなりました。

つまり、インポートウィザードの1ページ目で「設定」から定義を適用するとエラーで、2ページ目で適用するとエラーにならないという現象です。

Access2007における現象なので、2010以降は大丈夫なのかもしれません。

お困りの方がいたら、2ページ目以降でインポート定義を適用してみてください。

 

ABOUT ME
アズビーパートナーズ
アズビーパートナーズ
プログラマーと社内SEとしての経験を活かして、 情報システム部門のご相談を承ります。 得意な分野はAccessによる短納期開発、 BIツール(QlikSense/QlikView)の開発です。 現在はCMSを利用したホームページの作成にも力を入れています。