マイクロソフトデータベースソフトアクセス(以降Access)ですが、csvファイルをテーブルにインポートするのに「インポート定義」を設定しますが、
ココに注意
「インデックスが有効範囲にありません」というエラー
になりました。
いったい何が原因だったのでしょうか?
csvファイルをテーブルにインポート
以前、タブ区切りのcsvファイルをテーブルにインポートしたことがあります。
やりたい事は、全く同じなのですが、カンマ区切りのcsvファイルをインポートするので、新たにインポート定義を設定しようとしましたが、定義を設定する時点でエラーが出て先に進めません。
さらに詳しく
「インデックスが有効範囲にありません」ってどういう意味?
ネットで検索すると、対処方法としてデータベースを再起動(Accessの場合は終了して開始)すればうまく行ったような内容が多く存在していましたが、自分の場合は全く回復しませんでした。
なんとか分かった事は、インポートするフィールド数がインポート先(テーブル)より多かったり、フィールドの型が違った場合などに出るアラームらしい。
しかし、自分の場合は、インポートするAccessのテーブルのフィールドは、全部テキスト型なので型違いは無いはずです。
更に、フィールド数もインポートデータよりも多くしてあることは確認しています。
原因はインポート定義自体
原因はインポート定義を設定する時にあったようです。
これは、Accessを長年使用している人でも分からない部分だと思います。
まず、不思議現象で、インポート定義を設定している時に、フィールド情報「フィールド名」というのがありますが、このフィールド名が、インポートデータの先頭名が出ている時があります。
最初は、インポート先のテーブルのフィールド名が出ていたのですが、何かをやっていたら新規でテーブル定義を作成してもこのような現象になりました。
このフィールド情報「フィールド名」の部分は、
ココがポイント
インポート先Accessテーブルのフィールド名になっていなければダメ
さらに、インポートするCSVデータのフィールドより自動で読み込まれたフィールドが少ない場合があります。(?)
その場合、
ココがポイント
自由に手打ちで追加入力や削除することが可能
つまり、
インポートCSVデータのフィールド数 < インポートされるAccessテーブルのフィールド数
と言う様に修正しなければならないのです。
インポート定義も確認が必要
インポート定義を設定する時に、画面上ではサクサク進んで、タブ区切りもカンマ区切りも簡単に処理されるので、最後に、インポート定義を保存すればOKと思い込んでいましたが、ひとつエラーがでるとハマるので注意が必要ですね。
今回のように、フィールド情報をいじれるとは思ってなかった!思い込みから無駄な時間を費やすことになってしまいました。
思い込みから無駄な時間をかけてしまう事は過去に沢山経験していますが、もっと修行が必要ですね。