プロが教えるわが家の防犯対策術!

ACCESS2000
ACCESS クエリーでソートの不具合
Xテーブル
品コード 明細番号
昇順   昇順

作成したテーブルを見ると一部
111 01
111 02
111 03
222 01
333 01
111 04 <=分かれて表示されている。

データは3000件程あるのですが、アクセスの不具合?
データはグループでは集計されるのでヌルが入っていたりはしません。
体験のある方いらしゃいますか?

A 回答 (5件)

ご質問の内容が不明瞭ですので、ある仮定に基づいて回答してみます。



テーブル [商品マスタ] から select into でワークテーブル [workDB] を
作成した。テーブル [workDB] を直接開くと、select into に指定した
order by の順にレコードが表示されないが、なぜか?

上記の仮定が正しくなければ、以下の回答はスルーしてください。

上記の仮定が正しければ、それは不具合ではありません。
Access(に限らず多くの RDB)ではごくふつうの現象です。
データの入力順と格納順は必ずしも一致しません。それが利点なのです。
入力した順(この場合は select into に指定した order by の順)と関係
なく、データは空きブロックに配置されていきます。だからこそ、Access は
ディスクを効率的に使用できるのです(Access にはありませんが、サーバ
製品によっては何かの理由で物理ディスク上に順番に格納したい場合のため
にそれ用のオプションが用意されている場合があります。逆に言うと、
ふつうは特別にオプション指定でもしない限り、入力順に物理格納されたり
はしません。効率が悪いからです)。
ソートが重要なら、(入力時ではなく)参照時にクエリで order by 指定
しましょう。テーブルの格納順をあてにすべきではありませんし、テーブル
を直接開いて順番がどうなっているのか気にすべきでもありません(もし
それが気になるなら、RDB ではなく Excel のような表計算ソフトを使った
ほうが、たぶん精神衛生上は よいでしょう)。

ちなみに Access の場合は、主キーが設定されているテーブルであれば、
一応 主キーの順番に表示されることにはなっています。select into で
作成されるテーブルに主キーはありませんから、その場合の表示順は不定
です。
もし主キーがないのに入力順(追加順)にレコードが表示されたとしたら、
運よく連続する空き領域を確保できた場合、ということになります。この
ラッキー(?)は、入力(追加)するデータが多ければ多いほど、そして
ディスクの断片化が進んでいれば進んでいるほど、起こりにくくなります。
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます。出力側のレコードがソート順にならばないのですね。
今後、注意します。

お礼日時:2009/06/03 13:58

テーブルを単にデータシートビューで開いてもコードの昇順に表示


されるとは限りません。「テーブルを作る時のSELECT INTOでORDER BY
したじゃないか」というのは人間の都合で、ORDER BY されたのは元に
なるテーブルが一時的に並べ替えられただけです。
データシートビューにはテーブル毎に独自の書式(列幅、並び順)が
記録されます。掲題の例では品コード、明細番号の2列を選択し、
メニューバーから「レコード→並べ替え→昇順」と設定します。
ビューを閉じる時には変更を記録するかどうか問合せがあります。
但し、SELECT INTO を再実行すると、テーブルは削除→作成となる
ため、同じテーブル名でも表示形式はリセットされます。
希望の並び順になるようなクエリを作成し、そちらを開く方が話が
簡単です。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
出力ファイルも並び変えるということですね。

お礼日時:2009/06/03 14:04

補足ありがとうございました。



>SELECT 商品マスタ.品コード, 商品マスタ.明細番号 INTO workDB
>FROM 商品マスタ
>ORDER BY 商品マスタ.品コード, 商品マスタ.明細番号;
>データの型はテキストです。

この内容を拝見する限り、問題の状態になる要素はないと思いますので
解決策が解りかねます。
テキスト型の場合、半角全角が混ざっていても ACCESSの場合
逆に同一視されて識別できない事が よく問題なります。
お書きになったSQLからは、別れて並んでしまう点が不明です。
お力になれず、申し訳ありません。
    • good
    • 0

数字が全角文字で入力されているということはありませんか?

    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
データを111を選択して表示すると4件でてくるので同じデータです。

お礼日時:2009/05/28 08:40

そのクエリーを SQLビューで表示したテキストで


補足してください。
プラス、品コードと明細番号のデータの型を。

この回答への補足

SELECT 商品マスタ.品コード, 商品マスタ.明細番号 INTO workDB
FROM 商品マスタ
ORDER BY 商品マスタ.品コード, 商品マスタ.明細番号;

データの型はテキストです。
遅くなりました。
ご回答ありがとうございます。

補足日時:2009/05/29 11:42
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A