Microsoft Access ClubAccess超初心者対象ForumAccess初級者対象ForumAccess初・中級者対象ForumAccess VBA Tips ForumDAO、ADO、SQL Forum

     

No29957.値集合ソースへのSQL文について

タイトル値集合ソースへのSQL文について
記事No: 29957
投稿日: 2005/02/03(Thu) 21:55
投稿者: ぺぺ
OS:XP
Access Version:2000

コンボボックスの値集合ソースでOrderByを行わず、直接テーブルをSQLで指定しています。
テーブルにはインデックスにより、あるコードで昇順になるよう設定しています。
そこで、インデックスの指定により、コンボボックスの並び順は保証されるのでしょうか?
または、保証されないのであれば、その旨の裏づけが必要な状況です。
近いサポート情報は見つけたのですが(下記URL)
何か、おわかりになる方おられましたら、よろしくお願いいたします。
http://support.microsoft.com/default.aspx?scid=kb;ja;404983

タイトルRe: 値集合ソースへのSQL文について
記事No: 29958
投稿日: 2005/02/03(Thu) 22:36
投稿者: ミオナ
こんばんは。

>そこで、インデックスの指定により、コンボボックスの並び順は保証されるのでしょうか?
>または、保証されないのであれば、その旨の裏づけが必要な状況です。
「裏づけ」とはどういう意味でおっしゃっているのでしょう? 「証拠」という
ことでしょうか?

あまり専門的な難しい説明は苦手…というか、できないのですが、インデックスに関しての
ヘルプの説明を見てみますと
   単一フィールド インデックスを設定します。インデックス フィールドに対する
   クエリは、並べ替えやグループ化の操作と同様に、実行する速度が速くなります。
   たとえば、[フリガナ] フィールドで特定の社員名を検索する場合、このフィールド
   にインデックスを作成すると、検索を高速化できます。
と書いてあります。
つまりインデックスを指定すると検索や並び替え処理が速くなるというだけで、並び順を
保証してくれるとは読みとれないのですが…。


並び順に確実性を持たせたいということであれば、クエリにしてもSQLにしても
明示的に並び替えの指定をしておかれるほうがよいと思います。

タイトルRe: 値集合ソースへのSQL文について
記事No: 29962
投稿日: 2005/02/04(Fri) 00:51
投稿者: ねこ
> OS:XP
> Access Version:2000
>
> コンボボックスの値集合ソースでOrderByを行わず、直接テーブルをSQLで指定しています。
> テーブルにはインデックスにより、あるコードで昇順になるよう設定しています。
> そこで、インデックスの指定により、コンボボックスの並び順は保証されるのでしょうか?
> または、保証されないのであれば、その旨の裏づけが必要な状況です。
> 近いサポート情報は見つけたのですが(下記URL)
> 何か、おわかりになる方おられましたら、よろしくお願いいたします。
> http://support.microsoft.com/default.aspx?scid=kb;ja;404983

ぺぺさん。

たまたまうろいろしていたらこちらの質問を見つけたので、私の知っている限りで答えさせていただきます。
通常データベースではindexを作成すると、indexを作成した列はデフォルトで昇順に並ぶことになっていると思います。

ちなみに主キーを設定すると、主キーを設定した列はデフォルトでindexが作成されると思います。

ためしに、【テーブルをデザインビューで開く】→【ツールバーの表示】→【インデックス】と開くと現在設定してあるindexが表示されます。

すると主キーに設定した列はデフォルトでindexが作成されていると思います。
並び替え順はデフォルトで昇順になっているので、降順に設定することも可能です。
たしか、上から設定してある順に並び替えを行ってくれるのだと思います。

多分間違った説明ではないとは思いますが、、、

> そこで、インデックスの指定により、コンボボックスの並び順は保証されるのでしょうか?
コンボボックスの並び順というのがよくわからないのですが。。

タイトルRe: 値集合ソースへのSQL文について
記事No: 29967
投稿日: 2005/02/04(Fri) 04:29
投稿者: udonge
実は質問の意図がよくわかってない私なのですが、バッチリなサポートを見つけているような気がしますよ?
サポートにもありましたが、Select … From [tablename] Order By …;
って感じで並び順を指定するのに…なにか不都合でもあるのでしょうか?

何か特別な並び順が必要なら、ソートのキーになるフィールドを含めた適当なテーブルを作成して
改めて値集合ソースにしては?

タイトルRe^2: 値集合ソースへのSQL文について
記事No: 29975
投稿日: 2005/02/04(Fri) 09:37
投稿者: ぺぺ
みなさま回答ありがとうございます。

私の説明不足なところがあるみたいで。。。。すいません。

1.コンボボックスの値集合ソースに、SQL文でテーブル内容を表示させている
2.該当のテーブルには、主キーにインデックス(昇順)が付いている
3.コンボボックスのSQL文には、OrderBy句がついていない

質問
 1.コンボボックスに表示される内容は、主キーにより昇順になるのか。
 2.現状、主キーにより昇順になるのだが、その動きは保証されているのか。
   (サポート情報などで)

値集合ソースへOrderBy句をつけ、明示的に並び替えの指定をすれば問題ないのですが、
できれば現状を変更したくないため、このような質問をさせて頂いてます。
まだまだ、説明不足かとは思いますが、よろしくお願い致します。
 

タイトルRe^3: 値集合ソースへのSQL文について
記事No: 29981
投稿日: 2005/02/04(Fri) 10:51
投稿者: ねこ
ぺぺさん。

ぺぺさんが見つけられたページ
(http://support.microsoft.com/default.aspx?scid=kb;ja;404983)
を拝見すると下記のように述べられているところがポイントだと思いました。

パラメータ (上記の場合はフォーム上のコントロール) を参照し、明示的な並び替
えの設定が行われていないクエリを、リストボックスやコンボボックスの値集
^^^^^^^^
合ソースに使用すると、テーブルにレコードが入力された順番で表示されま
す。

なので値集合にSQL文を設定した場合
【昇順に並ぶ】
 select * from テーブル名;
(ただし並べたい列が主キー or indexがついている)
【昇順に並ばない】
 select * from クエリ名;
(ただしクエリ名を使用して並べるならば、クエリ内で"order by"を使用するか、または値集合で"order by"を使用する。)

と理解したのですが、皆様いかがでしょうか?

タイトルRe^3: 値集合ソースへのSQL文について
記事No: 29999
投稿日: 2005/02/04(Fri) 18:55
投稿者: ミオナ
こんばんは。

興味深いテーマでしたので、今日、改めて
(http://support.microsoft.com/default.aspx?scid=kb;ja;404983)
上記ページをもとにいろいろ試してみました。(^_^;)

>フォームの値を参照したクエリをコンボボックスの [値集合ソース] プロパティ
>に設定すると、主キー フィールドでの並び順が無効になります。

  フィールド名    データ型 フィールドサイズ インデックス
-------------------------------------------------------------
   ID 数値型 倍精度浮動小数点型 主キー
  A 数値型 倍精度浮動小数点型

MSのページと同じ条件でテーブルやフォームを作って試してみると、確かに同じ
ようになりますね。(当方環境:WinXP+Access2000)
Access95のときから引きずってるこれって「仕様」なんですかねー?(^_^;)

ただし、「終了時に最適化する」と設定されている状態で一度mdbを終了して再度立ち上げると
今度はきちんと昇順に並んでいます。

で、あのページのポイントはあくまでも「フォームの値を参照」しているかどうかだと
思うのですが、これまでのぺぺさんの説明ではその点については触れられていません。
そのことについてはどうなっているのでしょうか?

さきほどのフォームにいくつかコンボボックスを作ってみたのですが、そのうちの2つに
以下のような値集合ソースを指定してみました。

(1) SELECT テーブル1.*, [Forms]![フォーム0]![フィールド0] AS 式1 FROM テーブル1;

(2) SELECT テーブル1.* FROM テーブル1;

(1)のほうは並び順はバラバラです。正確には入力した順番に表示されました。
(2)のほうは昇順で並びました。
なお、最適化後に終了して再起動すると(1)も昇順で並ぶようになりました。



>1.コンボボックスの値集合ソースに、SQL文でテーブル内容を表示させている
>2.該当のテーブルには、主キーにインデックス(昇順)が付いている
>3.コンボボックスのSQL文には、OrderBy句がついていない
>
>質問
> 1.コンボボックスに表示される内容は、主キーにより昇順になるのか。
> 2.現状、主キーにより昇順になるのだが、その動きは保証されているのか。
>   (サポート情報などで)

フォームの値を参照しているかどうか不明ですので、上記の質問におこたえするのは
今の段階ではできないのではないかと…。
もっとも、いずれにしても私のこたえは基本的に前回と同じです。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
以下はヘルプからの抜粋で、主キーに関するものです。
   Access などのリレーショナル データベース システムでは、クエリ、フォーム、
   およびレポートを使って、別のテーブルに格納されている情報の検索および収集を
   高速に実行できるという機能が重要になります。これを実現するには、格納された
   レコードを一意に識別するフィールドまたはフィールド セットが各テーブルに設定
   されている必要があります。この情報をテーブルの主キーと呼びます。テーブルの
   主キーを設定すると、一意性を保証するために、主キー フィールドには重複する値や
   Null 値を入力できなくなります。

私なりに要約しますと、「高速検索するためにはレコードはユニークでなければならない。
そのための情報が主キーである」というふうに読めます。
つまり主キーってあくまでもレコードを一意(ユニーク)にするためのもので、それ以上
でもそれ以下でもないってことになりませんかねー?
だって、フォームの値を参照したくらいで並びが無視されちゃうんですよ。(^_^;)



>値集合ソースへOrderBy句をつけ、明示的に並び替えの指定をすれば問題ないのですが、
>できれば現状を変更したくないため、このような質問をさせて頂いてます。
なぜ「現状を変更したくない」のか、理由をお聞かせ願えませんか?

それと、ぺぺさんはなぜ今回の質問を書き込もうと思われたのでしょう?
なんとなく「並び替えがちゃんとできてないんじゃない?」といった不安が胸をよぎる
ような出来事でもあったのでしょうか?


このAccessフォーラム過去ログ集は、Microsoft Access Club が運営しています

cPanel と PLESKをインストールした専用・共有レンタルサーバーを銀行振込でご提供中。契約書は一切不要です。
cPanelやPLESKをインストールした専用・共有レンタルサーバー
まずは1ヶ月から...。
日本国内の銀行振込がOK、クレジットカード、契約書が不要です。
対応は全てメールアドレスを介して行なっています。

 

ページの先頭へ 前ページへ戻る