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

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

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

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QACCESS クエリのデザインビューを開かせたくない。

管理者以外がクエリをデザインビューで開けないように設定したいのですが、セキュリティーの設定では、「構造の読み取り」にチェックを入れる必要があるので、クエリの抽出条件等が参照されてしまいます。(フォームを単票形式にしており、開いているフォームのページのID番号をクエリの抽出条件とし、レポートにその番号の内容のものだけが反映されるよう設定しています。また自分が作った関数の式を見られたくないのです。)クエリの条件がきちんとレポートに反映し、なおかつクエリをデザインビューで見れなくする方法はありますか。(「隠しオブジェクト」にするのは、なしです。ただ、隠しオブジェクトにしてもユーザーは「隠しオブジェクト」の設定ができないのであればありです。)
 プログラムを組むしかないのでしょうか?そうであればどんな感じで組めばいいのか教えてください。

Aベストアンサー

> クエリの条件がきちんとレポートに反映し、

クエリとして保存せずに、レポートのレコードソースでSQL文を使ってやるとか。

レコードソースプロパティで右側の ... をクリックすれば、クエリビルダが
起動しますので。

QACCESS ACCESS VBA テーブル テーブル変換 番号 個数 変換

私はプログラム初心者です。
業務の中でACCESSを使っております。
ACCESSでテーブルの変換についてのプログラムが分からなかったので
質問させて頂きました。


以下のようなテーブル(テーブル1)があります。
管理番号|NO|名前
1|NO.1|スプーン
2|NO.2|スプーン
3|NO.3|スプーン
4|NO.1|フォーク
5|NO.2|フォーク
6|""|ナイフ
7|NO.1|お鍋
以上のテーブルを新たにテーブル(テーブル2)を作成し、次のようなにしたいです。
管理番号|台数|名前
1|3|スプーン
4|2|フォーク
6|1|ナイフ
7|1|お鍋

テーブル変換の機能
・名前が同じ物の個数を表示する
・名前が同じ物の管理番号は若い番号にする

よろしくお願いいたします。

Aベストアンサー

Access2003でのクエリ作成手順になります。(他バージョンでもほぼ同じでしょう)

・「デザインビューでクエリを作成する」から対象のテーブルを表示させます。

・クエリデザインツールバーにある「Σ」をクリックします。
 (デザインの欄に「集計」が追加されます)

 もしくは、クエリの種類を1度「クロス集計」にし、「選択」に戻しても同じ状態になります。

・テーブル内の「管理番号」をダブルクリックします。
 フィールドに「管理番号」、テーブルに対象テーブル名、集計に「グループ化」が表示されます。
 集計のところを「最小」に変更します。
 並べ替えのところを「昇順」に変更します。

・テーブル内の「NO」をダブルクリックします。
 フィールドに「NO」、テーブルに対象テーブル名、集計に「グループ化」が表示されます。
 集計のところを「カウント」に変更します。

・テーブル内の「名前」をダブルクリックします。
 フィールドに「名前」、テーブルに対象テーブル名、集計に「グループ化」が表示されます。

・ここで、表示を「データシートビュー」に切り替えます。(注1)
 管理番号の最小、NOのカウント、名前 の表が表示されます。
 名前「ナイフ」部分のカウントが得たいものではなく「0」になっています。
 これは、NULLのデータはカウント対象外となっているためです。

・表示を「SQLビュー」に切り替えます。
 1行目中ほどに 「 Count(テーブル名.[NO]) AS NOのカウント, 」があります。
 NOに限定した個数を求めるのでなく、単にレコード数を得たいので
 これを 「 Count(*) AS 台数, 」に書き換えます。
 XXXXX AS YYYY は、XXXXXをYYYY名で、という意味合いになるので、
 同様に「管理番号の最小」->「管理番号」に修正します。

・表示を「データシートビュー」に切り替えます。

これで求めたいクエリは作成することができました。
このクエリをそのまま使うのではなく、結果をテーブルに書き出すには続いて以下を行います。

・表示を「クエリ デザイン」に切り替えます。

・メニューの「クエリ」->「テーブル作成」をクリックします。
 テーブル名を入力し、「OK」

 クエリデザイン上変化はありませんが、以上で終了です。

確認)
表示を「SQLビュー」に切り替えます。
1行目最後あたりに、「 INTO テーブル名 」が追加されています。
これが結果をテーブルに書き出す命令部分になります。


(注1)
「'*'で選択したフィールドはグループ化できません。」というメッセージが出たら、クエリ作成をいったんあきらめます。
(クエリデザインの画面を閉じます)
メニューの「ツール」->「オプション」の「テーブル/クエリ」タブの「クエリ デザイン」部分の「全てのフィールドを表示する」チェックを外し「OK」します。
クエリ作成を初めからやり直します。

(注2)
(注1)の変更は、以降も変更されたままとなるので、今回だけ回避するには、
表示を「SQLビュー」にし、1行目最後の「 テーブル名.名前, * 」の「 , * 」を削除します。


書く練習がてら、初心者向けに書いてみましたがいかがでしたでしょうか。

Access2003でのクエリ作成手順になります。(他バージョンでもほぼ同じでしょう)

・「デザインビューでクエリを作成する」から対象のテーブルを表示させます。

・クエリデザインツールバーにある「Σ」をクリックします。
 (デザインの欄に「集計」が追加されます)

 もしくは、クエリの種類を1度「クロス集計」にし、「選択」に戻しても同じ状態になります。

・テーブル内の「管理番号」をダブルクリックします。
 フィールドに「管理番号」、テーブルに対象テーブル名、集計に「グループ化」...続きを読む

Qアクセスのクエリのデザインビュー

表記の件で質問させてください。
デザインビューの抽出条件でIsNullやnotNull
を指定するにはどのようにしたらいいのでしょうか?
よろしくお願いします。
項目タイプは数値型です。

Aベストアンサー

スペースが抜けています

Is Null

Not Is Null

Null <>Null
と入力しても上のように書き変えてくれますよ

Qフォームをひとつのテーブルから作るときクエリーはつくりますか

フォームを作るとき,ひとつのテーブルから作るときでもクエリーを作るんですか?もしそうならそうする理由はなんでしょう?

Aベストアンサー

特にクエリを作らなくてもいいです。
でも、クエリを使うと抽出条件を付け加えることが出来ます。

QACCESS2003のクエリのデザインビューの抽出条件について

現在ACCESS2003上で、テーブルとテーブルを結合させて、日時を抽出条件にして表示させるレコードを限定しています。

そこで
発生日時≦対処日時≦回復日時
という抽出条件を
[テーブル1]![対処日時] >=[テーブル2]![発生日時] And [テーブル1]![対処日時]<=[テーブル2]![回復日時]
と記載しています。

ここまでは良いのですが
次に
発生日時-1時間≦対処日時≦回復日時+1時間
という風に抽出条件の範囲を時間で広げてやりたい場合はどのようにすればよいでしょうか

一度、日時をシリアル値に変換するという処理が必要になってくるのでしょうか。
日時のフォーマットは
yyyy/mm/dd hh:mm:ssです。

わかりましたら、ご回答よろしくお願いいたします。

Aベストアンサー

DateAdd関数を調べると分かりますよ

Q選択クエリーで 2つのテーブルの項目が Null どうしのデータを抽出するには?

初心者です、教えてください。

テーブルが、2つあって
テーブル名: T1 T2
フィールド1: A1 B1
フィールド2: A2 B2
フィールド3: A3 B3
とあった時、選択クエリーで T1 と T2 のフィールドの A1-B1、A2-B2、A3-B3 が、
一致したものを表示するクエリーを作成します。
でも、A2、A3、B2、B3のデータ中には、それぞれ Null値が入っていて、
A2-B2、または、A3-B3 が、Nullどうしなら、一致とみなして、表示するには、
どうしたらいいのでしょうか?

Nullのみどうしのデータで、Nullのフィールドを
除いた選択クエリーをつくって、あとで合わせてもいいのですが、
実際のテーブルは、そういうフィールドが、いっぱいあって、大変なんです。

簡単に表示する方法は、あるでしょうか?

初心者なのでむずかしいことは、
やったことがなくて、すいませんが、わかる方がいらっしゃたら、お願いします。

Aベストアンサー

MS|ACCESSは持ってないので正確ではないかもしれませんが
。あっ、その前に表示させるときリストボックスで表示させるのかフォームで表示させたいのか書かれたほうがアドバイスが増えるかもしれません。

取り敢えず、書式タブの規定値を'0'にすればいいかも。
詳しいことは以下を参考にしてください。

参考URL:http://ac.accessclub.jp/beginer/cd/part_07.htm

Qリレーションシップがたくさんついているクエリ同士だと、不一致クエリを作

リレーションシップがたくさんついているクエリ同士だと、不一致クエリを作成することはできないのでしょうか?

不一致クエリにしたい二つのクエリのみ別のフォームで作成し直して、不一致クエリを作成すると、抽出してくれたのですが、もともとのリレーションシップがついているクエリのままだと抽出が0になってしまいます。

フィールドやデザインは全く同じなのですが、やはりリレーションシップのせいでしょうか?

Aベストアンサー

【要旨】
クエリの結合線は、『結合先のテーブルのデータを検索条件として
扱う』という働きを持ちます。
リレーションシップによって自動で追加された結合線が不要(無用)
な場合は、クエリのデザインビューから削除する必要があります。

※リレーションシップは削除せず、クエリ毎に結合を編集します※


【詳細】

> リレーションシップがたくさんついているクエリ同士だと、
> 不一致クエリを作成することはできないのでしょうか?

『リレーションシップ』が「直接」レコードの抽出件数を左右する
ことはありません。

ただ、クエリのデザインビューで、リレーションシップが設定
されたテーブル同士を追加した場合等には、それに対応した
『結合線』も自動的に追加されます。

リレーションシップと結合の違いについて(回答No.2):
http://oshiete.goo.ne.jp/qa/5073445.html

この、『クエリのデザインビューでの、テーブルの結合』は、
「複数の検索条件を指定した抽出」としての意味を持つため、
リレーションシップの設定が、結果として(間接的に)、
抽出件数を左右する、ということはあります。
http://oshiete.goo.ne.jp/qa/5683407.html

従って、クエリで実際に行いたい抽出の内容によっては、
リレーションシップの設定を元に自動的に追加された結合を
削除したり、結合の種類を変更したり、といった操作も必要に
なります。

操作方法は、それぞれ以下の通りです:

<結合線の削除>
a)結合線をクリックして太線表示になった状態で、キーボードの
 Deleteキーを押す
b)結合線を右クリックして表示されるメニューから「削除(D)」を
 選択

<結合線の変更>
 結合線をダブルクリックするか、それを右クリックして表示
 されるメニューから「結合プロパティ(J)」を選択すると開く
 『結合プロパティ』ダイアログで、目的に合った項目を選択


・・・以上、長文失礼致しました。

【要旨】
クエリの結合線は、『結合先のテーブルのデータを検索条件として
扱う』という働きを持ちます。
リレーションシップによって自動で追加された結合線が不要(無用)
な場合は、クエリのデザインビューから削除する必要があります。

※リレーションシップは削除せず、クエリ毎に結合を編集します※


【詳細】

> リレーションシップがたくさんついているクエリ同士だと、
> 不一致クエリを作成することはできないのでしょうか?

『リレーションシップ』が「直接」レコードの抽出件数を左右する
ことはありま...続きを読む

QMs Access テーブルBにテーブルAのCDを充てたい。(クエリ?紐づけ?リレーションシップ?)

初心者です。よろしくお願いします。
そもそも、できるのかどうか、できたとして、どうするのかがわからないです。

次の2つのテーブルがあります。
テーブルマスタA には、①市町村CD ②市町村名 ③住所(番地なし)
テーブル受付データB には、①NO ②住所(番地まであり)③受付日 ④⑤・・・

具体的には、以下のとおり。(サンプル)
テーブルマスタA
①    ②      ③
10000  松戸市    千葉県松戸市
20000  鎌ケ谷市本町 千葉県鎌ケ谷市本町
30000  横須賀市   神奈川県横須賀市
テーブル受付データB
①    ②
1    千葉県松戸市五香5-5-5    
2    千葉県鎌ケ谷市本町さくらがおか8-88-8 ひまわりアパート302
3    神奈川県横須賀市横須賀8-7-8   

テーブル受付データBにおいて、②の部分(市町名まで)と、
テーブルマスタAの③をなんとか紐づけて、

クエリで合体させたい。
=テーブル受付データBに、テーブルマスタAの市町村CDを充てたい。
A①市町村CD  A②市町村名 B② B③ B④ B⑤
とすることを切望しています。

***********
たとえば、2つのテーブルに同じフィールドがあって、
それをリレーションシップで紐づけるのは容易ですが、
今回のようなパターンは、
もしかして、私は、ナンセンスなことをしようと苦闘している?と思ってきました。
フィールド名が同じじゃないのに、それを紐づけることができるのでしょうか?

できるとして、どのようにすればよいのでしょうか?

どうぞ、教えていただきたく、お願いいたします!!!

初心者です。よろしくお願いします。
そもそも、できるのかどうか、できたとして、どうするのかがわからないです。

次の2つのテーブルがあります。
テーブルマスタA には、①市町村CD ②市町村名 ③住所(番地なし)
テーブル受付データB には、①NO ②住所(番地まであり)③受付日 ④⑤・・・

具体的には、以下のとおり。(サンプル)
テーブルマスタA
①    ②      ③
10000  松戸市    千葉県松戸市
20000  鎌ケ谷市本町 千葉県鎌ケ谷市本町
30000  横須賀市   神奈川県横...続きを読む

Aベストアンサー

パラメータが表示されたのは指定したフィールドがないからです。
テーブル名とフィールド名を使用している名前に変更してください。

InStr関数は
ある文字列 (string1) の中から指定された文字列 (string2) を検索し、最初に見つかった文字位置を返す文字列処理関数です。
InStr(string1, string2)

やっていることはテーブル受付データBの②(住所)の中からテーブルマスタAの③(住所)を検索し
文字列がある位置を出しています。
必要なのは文字列が含まれているデータのみなので条件を>0としています。

試しにInStrの部分をなくしてクエリを実行してみてください。
「テーブルマスタA」のレコード数*「テーブル受付データB」のレコード数のデータが表示されるはずです。

QACCESS2007のクエリについて

ACCESS2007のクエリについて

ACCESS初心者です。
よろしくお願いします。

クエリを作成するときに、デザインビューでフィールドの位置を変更したり、
(たとえば、「氏名」の列を4列目から2列目に移動する)
並べ替えなどをして、データシートビューにすると反映されているのに、
データシートビューでフィールドの位置を変更したり、並べ替えなどをしても、
デザインビューには反映されてませんが、
クエリとはこういうものなのですか?

Aベストアンサー

デザインで設定を元にデータシートビューを(毎度)作ってます。
クエリデザインビューで設定を定義する、
その実行結果を見るのが(クエリの)データシートビュー、
そういう使い方です。
テーブルのデザインビュー、データシートビューも同じ感覚と
みていいでしょう。

デザイン上でも変更できて、データシートビュー上でも変更できたら
何が正しい状態かわからなくなってしまいます。

クエリデザインビューで設定したらデータシートビューで確認、
追加修正あったらクエリデザインビューで修正しまたデータシートビューで確認、
この繰り返しです。
必要に応じて保存。

QAccess2000でAccess97のテーブルを利用する方法

Access97からAccess2000へのコンバージョンを行っています。様々な問題が発生しているのですが、解消困難な問題があり質問させて頂きます。
まず、背景・環境など長くなりますが、説明します。
自社で開発したプログラムの97→2000への移行を行っていますが、予算とマシンスペックの問題で、ユーザーのOS(95、98、2000、XP)、Office(97、2000)共に混在する状況となります。また、一人のユーザーが複数の事業所で仕事をしており、使用するマシンも一定ではなく、一台のマシンを複数のユーザーが使用します。
問題となっているプログラムは、プログラム本体とデータ部分がそれぞれ別のmdbファイルとして構成されており、本体からテーブルのリンクでデータ用mdbを利用しています。
また、ワークグループを利用しパスワードによるアクセス管理を行っています。
データ部分は、他のプログラムでも利用しており、そのプログラムも97版と2000版が混在しています。
そのため、データmdbは97で利用したいと思っています。
ところが、2000のプログラムでDlookup関数を使用し、97データの取得結果が正しくありません。途中で切れたり、余計な文字が後ろについてしまいます。リンクテーブルを選択クエリにしても同じでした。

(正)東京三菱銀行→(誤)東京三菱銀行??○!!
(正)123456→(誤)1234
Dlookup("フィールド名" & "","リンクテーブル名")
という風に文字列の後に空文字を加えると正しく表示されます。
ただ、すべてのDlookup関数を調べ処理を追加するには数も多く、今後の保守に問題が残ります。
また、データを2000に変換すると問題が発生しません。しかし、互換のため、97形式でデータmdbを作成することも考えたのですが、設定したワークグループセキュリティが解除されることも判明しています。
解決方法か関連情報をお持ちの方、ご教授お願いします。

Access97からAccess2000へのコンバージョンを行っています。様々な問題が発生しているのですが、解消困難な問題があり質問させて頂きます。
まず、背景・環境など長くなりますが、説明します。
自社で開発したプログラムの97→2000への移行を行っていますが、予算とマシンスペックの問題で、ユーザーのOS(95、98、2000、XP)、Office(97、2000)共に混在する状況となります。また、一人のユーザーが複数の事業所で仕事をしており、使用するマシンも一定ではなく、一台のマシンを複数のユーザーが使用します。
...続きを読む

Aベストアンサー

DLookUpはAccessのライブラリの関数です。バージョンの違うDBに、バージョンの違う同名のAccess関数を使用するのはどうかと、、、

SQL文で問い合わせても一緒ですか?

可能であれば、ADOを利用することをお勧めします。


人気Q&Aランキング

おすすめ情報