- 締切済み
Accessにインポートしたら並び順が変わっちゃった
Access2000 を使っています。 ExcelデータをAccessテーブルにしようとしましたが、全項目をテキスト型で入れたいのに、自動的に各項目の型が変わってしまうので、一旦CSVに落としてAccessにインポートしました。 ところが、インポートされたテーブルではレコード順が違っちゃっているんです。 総数は変わっていませんから、全て入ってはいるんでしょうが。 いったい何がいけないんでしょうか。多量のデータをインポートするのに不安でいけません。誰か教えて下さい。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- HAL007
- ベストアンサー率29% (1751/5869)
>>インポート等においてAccessが順番をあえて変えてしまうことに言及して >>いただけていませんが、Accessは常にそういう余計な動作をするものなのですか。 インポートした順番を意識したことがないので調べたことがありません。 推測で答えますので誤りがあれば訂正して頂ける人が居れば幸いです。 Accessはリレーショナルデータベース(RDB)なので自由な検索が出来るのが 一番の特色です。データを順番に読む必要が出れば後からインデックス (索引)を付けることで自由に検索出来きます。 インポートをする時に主キーの設定を聞かれますが、そこで何らかの項目を 設定すると、その項目が索引になります。 索引を付ける意義は、例えば人事の社員テーブルでは、社員番号を主キーに して重複なしにします。同じ社員番号を持つ人が複数いたらまずいですね! それから、社員番号を使って個人の情報を表示する使い方が多くなります。 多く使われる項目は順番に並べて置いた方が早く検索出来るテクニックが あります。そのために索引のデータで並び変えて仕舞っても不思議では ありません。 インポートファイルの順番にするには先頭に追加する連番を主キーに指定 すると順番が変らないはずです。この様な使い方は売り上げ伝票のデータ の様にキーとなるもの設け難く入力順に並んでくれた方が後の処理で 都合が良いのでこの様な場合に設定にします。 多くの場合、入力のレコード順よりもクエリーなどの実行結果のリストの 並び順の方が重要です。この並び順はクエリーで指定しますので入力側は 上述の伝票処理などを除けば余り意味がありません。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>インポート等においてAccessが順番をあえて変えてしまうことに言及していただけていませんが、Accessは常にそういう余計な動作をするものなのですか。 データベースでは、処理的に一番早く追加できる領域に追加をしていきます。 そのため、最適化されていないテーブル(以前は値が入っていたが、現在はレコードの削除があったなど)では、以前のレコードの情報が残っていたりすると、テーブルの一番最後に追加するのが高速であったり、以前レコードが存在していた領域を上書きするのが高速だったりという感じでどこに追加されるかわからない状態になります。 なので、最適化をしてからデータをインポートすれば、その順番に入るかもしれません。 ただし、たしかAccessでは、主キーが張ってあるテーブルはインポートのレコード順に関係なく主キーの値の昇順になったような???
- HAL007
- ベストアンサー率29% (1751/5869)
大規模なデータを移行する場合に良く問題になるのが全量を移行出来たかです。 チェックする方法は幾つかのチェックするポイントを決めて置き取り込み前後で 確認をします。 例えば、レコード件数や金額の集計値、キーごとのサンプルチェックです。 しかし、Accessであれば取り込み失敗したレコードがエラーファイルに 書き出されます。このファイルは先頭に何番目のレコードでエラーが出たか 判る様に連番が振られていますから容易にエラーが確認出来ます。
お礼
ありがとうございます。 データ量が多くなれば全数チェックは困難になりますから サンプリングチェックですね。 ところで、HAL007さんも、先のtaka_tetsuさんも、インポート等においてAccessが順番をあえて変えてしまうことに言及していただけていませんが、Accessは常にそういう余計な動作をするものなのですか。 素人臭い質問かも知れませんが、また是非教えて下さい。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
RDB(リレーショナルデータベース)には、レコードの並び順という概念は存在しません。 そのため、任意の順番でデータを取得したいときは、あらかじめレコードに連番を入れる項目を追加しておく必要があります。
お礼
ありがとうございます。 そうですよね。うーん。 でも、だからこそインポートやコピー&ペーストでは、正しく入ったという確認がほしいんです。 データベースに並び順の概念がないのに、インポートした内容が何もしてないのにインポート前と違う順番になってしまう原因があると思うんです。 その原因がわからないと、正しくインポートされたかどうかすら確証が持てなくなっちゃいますよね。
お礼
ありがとうございました。 なるほど、そういう訳なんですね。 確かに、1度EXCELデータをそのままインポートしたテーブルに入れたんです。 EXCELデータをそのままインポートしたら、セルの表示形態(分類)に関係なく値が数値なら勝手に数値扱いされちゃったんで、テキストとしてありのまま入ってほしくて、CSV変換+CSVインポートとしたんです。 最初のEXCELインポートも、後のCSVインポートも主キーはインポート後にオートナンバーを付けたんですけど。 レコードを全部削除して、そこに入れ直したんですが、ACCESS君が使い古しのレコードを使うのを嫌がって、新しいレコードに入れて、ある単位入れたら、後の方に入れるのがシンドくなってきて、使い古しでも上の方にある入れる方が楽だなってことになった。って解釈でいいんでしょうか。