【備忘録】MS AccessのテーブルにUTF-8のCSVをインポートするときに生じる不具合コンボの切り抜け方3
ここまで、AccessのテーブルにUTF-8のCSVをインポートする際に生じる不具合の回避策として、
という2つの方法があるが、どちらも万全とは言えない、というお話をしてきました。
以下では、少々手間はかかりますが、制約なし&Acccess上で完結できる解決法をお示ししたいと思います。
【設定】をクリック。→コードページで「Unicode(UTF-8)」を選択。→【OK】をクリック。→【次へ】をクリック。
「先頭行をフィールド名として使う」にチェックを入れ、【設定】をクリック。
255文字以上のフィールドを選択して、データ型を「長いテキスト」に変えていきます。
フィールドの表示が途切れたら、その先のフィールドを直接入力していきます。
最後のフィールドまで入力できたら、【保存】をクリック。
適当な定義名を付けて、【OK】をクリック。→テキストインポートウィザード画面に戻ったら、【完了】をクリック。
残念ながら、まだエラーは解消されません・・・
エラーの内容を確認すると、インポート定義上で直接入力したフィールドのデータ型(長いテキスト)が反映されていないことがわかります。
インポート先のテーブルをデザインビューで見てみましょう。
インポート定義で直接入力したフィールドのデータ型がすべて「短いテキスト」になってしまっています。
つまり、テキストインポートウィザードではUTF-8のCSVをまともにインストールすることはできない(場合がある)! ということです。よろしい、ならばVBAだ!!
デザインビューで、必要なフィールドのデータ型を「長いテキスト」に変更します。
テーブルを保存し、データシートビューで開いたら、全レコードを削除します。
さて、ここからがハイライトです。
[作成]から[フォームデザイン]をクリック。
フォームにボタンを一つ追加し、ボタンの上で右クリック。→[イベントのビルド]をクリック。
「コードビルダー」をクリック。→【OK】をクリック。
コードペインに以下のように入力します。
簡単に解説すると、
- DoCmd.TransferText acImportDelim 区切り記号でフィールドを分割してデータを取り込む を意味します。
- , "Kaken_インポート定義" 上の作業で保存した定義名です。
- , "KAKENN~1" インポート先のテーブル名です。
- , "C:\Users\2ftn8n2\Downloads\kaken.csv" インポート元のCSVのパスです。ファイル名の中に半角ピリオドがあるとエラーになるので、注意してください。
- , True 先頭行をフィールド名として使う を意味します。
適当な名前を付けてフォームを保存し、フォームビューで開きます。
ボタンをクリックします。
無事、インポートできました!