• 締切済み
  • すぐに回答を!

Accessにインポートしたら並び順が変わっちゃった

Access2000 を使っています。 ExcelデータをAccessテーブルにしようとしましたが、全項目をテキスト型で入れたいのに、自動的に各項目の型が変わってしまうので、一旦CSVに落としてAccessにインポートしました。 ところが、インポートされたテーブルではレコード順が違っちゃっているんです。 総数は変わっていませんから、全て入ってはいるんでしょうが。 いったい何がいけないんでしょうか。多量のデータをインポートするのに不安でいけません。誰か教えて下さい。

  • kob
  • お礼率65% (79/120)

共感・応援の気持ちを伝えよう!

みんなの回答

  • 回答No.4
  • HAL007
  • ベストアンサー率29% (1751/5869)

>>インポート等においてAccessが順番をあえて変えてしまうことに言及して >>いただけていませんが、Accessは常にそういう余計な動作をするものなのですか。 インポートした順番を意識したことがないので調べたことがありません。 推測で答えますので誤りがあれば訂正して頂ける人が居れば幸いです。 Accessはリレーショナルデータベース(RDB)なので自由な検索が出来るのが 一番の特色です。データを順番に読む必要が出れば後からインデックス (索引)を付けることで自由に検索出来きます。 インポートをする時に主キーの設定を聞かれますが、そこで何らかの項目を 設定すると、その項目が索引になります。 索引を付ける意義は、例えば人事の社員テーブルでは、社員番号を主キーに して重複なしにします。同じ社員番号を持つ人が複数いたらまずいですね! それから、社員番号を使って個人の情報を表示する使い方が多くなります。 多く使われる項目は順番に並べて置いた方が早く検索出来るテクニックが あります。そのために索引のデータで並び変えて仕舞っても不思議では ありません。 インポートファイルの順番にするには先頭に追加する連番を主キーに指定 すると順番が変らないはずです。この様な使い方は売り上げ伝票のデータ の様にキーとなるもの設け難く入力順に並んでくれた方が後の処理で 都合が良いのでこの様な場合に設定にします。 多くの場合、入力のレコード順よりもクエリーなどの実行結果のリストの 並び順の方が重要です。この並び順はクエリーで指定しますので入力側は 上述の伝票処理などを除けば余り意味がありません。

共感・感謝の気持ちを伝えよう!

  • 回答No.3

>インポート等においてAccessが順番をあえて変えてしまうことに言及していただけていませんが、Accessは常にそういう余計な動作をするものなのですか。 データベースでは、処理的に一番早く追加できる領域に追加をしていきます。 そのため、最適化されていないテーブル(以前は値が入っていたが、現在はレコードの削除があったなど)では、以前のレコードの情報が残っていたりすると、テーブルの一番最後に追加するのが高速であったり、以前レコードが存在していた領域を上書きするのが高速だったりという感じでどこに追加されるかわからない状態になります。 なので、最適化をしてからデータをインポートすれば、その順番に入るかもしれません。 ただし、たしかAccessでは、主キーが張ってあるテーブルはインポートのレコード順に関係なく主キーの値の昇順になったような???

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございました。 なるほど、そういう訳なんですね。 確かに、1度EXCELデータをそのままインポートしたテーブルに入れたんです。 EXCELデータをそのままインポートしたら、セルの表示形態(分類)に関係なく値が数値なら勝手に数値扱いされちゃったんで、テキストとしてありのまま入ってほしくて、CSV変換+CSVインポートとしたんです。 最初のEXCELインポートも、後のCSVインポートも主キーはインポート後にオートナンバーを付けたんですけど。 レコードを全部削除して、そこに入れ直したんですが、ACCESS君が使い古しのレコードを使うのを嫌がって、新しいレコードに入れて、ある単位入れたら、後の方に入れるのがシンドくなってきて、使い古しでも上の方にある入れる方が楽だなってことになった。って解釈でいいんでしょうか。

  • 回答No.2
  • HAL007
  • ベストアンサー率29% (1751/5869)

大規模なデータを移行する場合に良く問題になるのが全量を移行出来たかです。 チェックする方法は幾つかのチェックするポイントを決めて置き取り込み前後で 確認をします。 例えば、レコード件数や金額の集計値、キーごとのサンプルチェックです。 しかし、Accessであれば取り込み失敗したレコードがエラーファイルに 書き出されます。このファイルは先頭に何番目のレコードでエラーが出たか 判る様に連番が振られていますから容易にエラーが確認出来ます。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。 データ量が多くなれば全数チェックは困難になりますから サンプリングチェックですね。 ところで、HAL007さんも、先のtaka_tetsuさんも、インポート等においてAccessが順番をあえて変えてしまうことに言及していただけていませんが、Accessは常にそういう余計な動作をするものなのですか。 素人臭い質問かも知れませんが、また是非教えて下さい。

  • 回答No.1

RDB(リレーショナルデータベース)には、レコードの並び順という概念は存在しません。 そのため、任意の順番でデータを取得したいときは、あらかじめレコードに連番を入れる項目を追加しておく必要があります。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。 そうですよね。うーん。 でも、だからこそインポートやコピー&ペーストでは、正しく入ったという確認がほしいんです。 データベースに並び順の概念がないのに、インポートした内容が何もしてないのにインポート前と違う順番になってしまう原因があると思うんです。 その原因がわからないと、正しくインポートされたかどうかすら確証が持てなくなっちゃいますよね。

関連するQ&A

  • Access(アクセス)でのインポートについて

    テーブルのインポートでエクセルファイルをインポートしたいのですが「ワークシートインポートウィザード」の画面でテーブルを指定して保存すると 「Microsoft Access」の画面で「すべてのデータをテーブルに追加できませんでした。 キー違反のため、0件のレコードのデータが失われ、0件のレコードが削除されました。」と出てきて、保存できません。 もとのテーブルのデータ型を使ってインポートするにはどうしたらいいのでしょうか。よろしくお願いします。 インポートする元のデータ(エクセル)とインポート先(アクセス)の関係は次の通りです。 エクセルファイル    アクセスのテーブル (セルの書式設定)   データ型、フィールドサイズ --------------------------------------------- 数値          数値型、長整数型 文字列         テキスト型、16 インポートする前に元のエクセルデータをアクセスのデータ型に合わせただけではダメなのでしょうか

  • Access2000へのインポートエラー

    CSVで出力されたデータをAccessに読み込んで作業しています。一日ごとのCSVをAccessのテーブルに順にインポートして、複数日のデータをひとつのテーブルにしていたのですが、97ではできたこの機能が2000だと「キー違反」としてレコードが削除されてしまいます。以前は(97では)何の問題もなく進んでいたので、何がいけないのかさっぱりわかりません。どなたか教えていただけるとありがたいのですが・・・。よろしくお願いいたします。

  • Accessのインポートについて

    マイクロソフトアクセス2010でテーブルを作り、そこにCSVファイルを読みこませたいです。 テーブルのフィールドはテキスト型です。 例えば、Table_TESTというテーブルにF1というテキスト型のフィールドを設けます。 Access標準のTEXTインポート機能を使い、インポートを行おうとします。 CSVファイルのデータは、「12345678912345678ABCD」といったように数値とアルファベットです。 なぜか、このようなデータをインポートする時にデータ変換エラーと表示されて、正しくインポートできません。 これは、なぜこのような現象が起こるのでしょうか?

  • csvファイルのインポート

    Accessでcsvファイルをインポートさせようとしています。しかし、「F1フィールドがありません」のようなエラー表示が出て、できません。私の予想では、テーブルの型とcsvファイルの型が違うのではないかと思っています。テーブルには、数値型、テキスト型、日付/データ型があります。 保存したcsvファイルをExcelで開くと日付がApr-01や、2001/06/26となったりしていました。どこかで型変換のようなことをするのでしょうか?csvのことはよく分かりません。どうか、よろしくお願いします。

  • Access2003 インポートについて質問がございます。

    Access2003 インポートについて質問がございます。  すでに完成しているテーブルがあり、  そこに毎月のExcelデータを都度テーブルに蓄積していきたいのですが、  Accessを開かずしてテーブルにインポートすることは可能でしょうか。  すでにテーブルのフィールド順に、レコード単位でExcelに並べられている条件です。   (Excelの行コピー⇒ Accessテーブルの最終行に貼付でインポートできる状態) 初心者なもので大変恐縮ですが、ご教示をお願いいたします。  

  • CSVファイルをアクセスのテーブルに出力する

    こんにちは Access VBA初心者です。 やりたい処理なのですが CSVファイルをmdb内であらかじめ作成されているテーブルに出力したいのですが、 最初にTransferTextwでワークのテーブルにインポートして そのワークテーブルを1レコードずつ読み込みmdbのあらかじめ作成されているテーブルにINSERTしていくという方法しか今思いつきません。 インポートするとワークテーブルはすべてテキスト型になっていますが、 それを違う型の項目にINSERTするということなど可能なのでしょうか? それとももっとスマートな方法があるのでしょうか? ざっくりと書いてしまいましたが、よろしくお願いいたします。

  • ACCESS2002、レコードのインポートができません!

    初心者です、よろしくお願いします。 ■ 仕様環境 WinXP Access2002 アクセス2002で顧客管理システムを作ってます。 アクセスAのテーブルにアクセスBのテーブルをインポートする時、 レコードだけインポートできないのでしょうか? どうしても違うテーブルが作られてしまいます。 例えば・・ アクセスAに「住所」という項目があり、そこには既にレコードが 何件か入っているのですが、そこにアクセスBの「住所」のレコードを追加したいのですが、 うまくいきません。そういう機能はついていないのでしょうか? また、アクセスBの情報をエクセルファイルに変えて「次のテーブルに保存する」で インポートしたのですが、最後の「完了」ボタンを押すと「エラーが発生し、 インポートできませんでした」という表示がでてインポートできません。 同じように電話番号や名前、メールアドレス等もアクセスAに追加したいのですが、 一つ解決しないと先に進まない気がするのでとりあえず住所だけにしぼってみました。 データを”追加”するような感じでしたいのです! 誰かお知恵を貸してください!

  • アクセス2007でのインポートエラー「カレントレコードがありません」に

    アクセス2007でのインポートエラー「カレントレコードがありません」について。 データをインポートしようとすると「カレントレコードがありません」と表示され、インポートできません。同時に作成されるインポートエラーテーブルを確認すると「型変換エラー」が原因のようです。 インポート先のファイル(名簿.accdb)は、従前使用していたアクセス2003のファイル(名簿.mdb)を2007対応にしたものです。(各オブジェクトの構成や保有データは同一) 試しに、同じテキストデータをアクセス2003ファイル(名簿.mdb)にインポートしたところ、正常に完了しました。 アクセス2003の入ったパソコンが廃棄予定であり、今後はアクセス2007ファイル(名簿.accdb)を使いたいのですが、非常に困っています。原因と対処法を教えてください。 ※インポートする元データはエクセルマクロ有効ブック(.xlsm)のため、コピーしてテキスト形式で保存しなおしています。

  • ACCESSで、テキストファイルをインポートしたい

    宜しくお願い致します。 ACCESSで、テキストファイルをインポートしてテーブルを作成したいのですが、ファイル→インポートを選択して、ウィザードを開く方法は分かるのですが、マクロを作成してインポートは出来ないでしょうか? excel、CSVファイルでしたら、「ワークシート変換」、「テキスト変換」のマクロでインポートしたりエクスポートしたり出来ると思うのですが・・・、 (1)テキストファイルをインポートしたり、エクスポートしたりする場合、どのようなマクロがあるのでしょうか。 (ためしに、「出力」マクロで、あるテーブルをCSVファイルにエクスポートしてみたのですが、カンマ区切りにできず、excelのような枠付きのテキストファイルになってしまいました。) (2)容量が大きいデータの場合は、テキストファイルでエクスポートしたほうが良い・・・という認識に間違いはありませんでしょうか。 質問が一つ増えてしまいましたが、宜しくお願い致します。

  • excel→accessへのインポートがうまくいきません。

    access2000を使っています。 excel2002のデータをaccessへインポートしようとしているのですが、ブランクのフィールド(セル)を1つでも含むレコード(行)はインポートされません。言い換えれば、全てデータの満たされている行しかインポートされないのです。何故でしょうか?