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ページ目以降でインポート定義を適用してみてください。
\逆引き辞書があると便利です/ [itemlink post_id=”1386″]