Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Access 2021)
ソートを設定したテーブル作成クエリを実行してもソートがかからない
投稿日時: 22/10/31 10:59:09
投稿者: rose11

お世話になります。    
 
テーブル「T_test1」を作成するクエリ(ソート設定有り)を単独で実行後、「T_test1」を確認するときちんとソートがかかっているのですが、VBAで以下を実施すると、「T_test1」にソートがかかっていない状態になります。
 
    Call cmd13_drop_table("T_test1")
    CurrentDb().QueryDefs("Q_test1").Execute        'T_test1テーブル作成クエリ
     
    rs.Open "T_test1", CurrentProject.Connection
    rst.Open "T_test2", CurrentProject.Connection, , adLockOptimistic
 
    Do Until rs.EOF
        処理
        rs.MoveNext
    Loop
        
    rs.Close
    rst.Close
 
何故、上記を実行するとT_test1にソートがかかっていないのか、
ご教示をよろしくお願いいたします。

回答
投稿日時: 22/10/31 11:13:18
投稿者: hatena
投稿者のウェブサイトに移動

Accessのテーブルは明示的に並べ替えを指定しない限り並び順は不定です。入力順は記憶されてません。(リレーショナルデータベースは一般的にそういう仕様です。)
もし、入力順に並べ替えたいなら、オートナンバー型のフィールドを追加するか、独自の採番機能を実装することになります。
 

投稿日時: 22/10/31 11:36:48
投稿者: rose11

hatenaさま
 
早々のご回答をありがとうございます。
言葉足らずで申し訳ありません。
 
クエリ「Q_test1」では売り上げテーブル「T_A」と商品テーブル「T_B」を紐づけ、商品テーブルの商品IDを昇順にして「T_test1」を作成しています。
テーブル「T_test1」に直接入力するわけではないのですが、「入力順」と仰いますのは、どのような処理のことかご教示いただけますでしょうか。
お手数をおかけして申し訳ありません。
どうぞよろしくお願いいたします。

回答
投稿日時: 22/10/31 12:05:50
投稿者: hatena
投稿者のウェブサイトに移動

並べ替えを設定したクエリを元にテーブル作成クエリで新規テーブルを作成したということですよね。
で、その元のクエリの並び順が、新規テーブルに反映されていないということですね。
 
新規テーブルには元のクエリの並び順でデータが追加されますが、テーブルの並び順がそのとおりになるとは限らないということです。
 
大量のデータを扱うことが前提のデータベースでは、データ追加時にファイルの最後に順に追加していくという設計にはなっていないのです。
 
テーブルの希望の並び順にするには、そのように並べ替えるフィールドが必要ということです。
 
> 商品テーブルの商品IDを昇順にして「T_test1」を作成しています。
 
もし、の商品IDを昇順にしたいなら、そのように並べ替えを指定してください。
 
例えば、
 
rs.Open "SELECT * FROM T_test1 ORDER BY 商品ID;", CurrentProject.Connection

投稿日時: 22/10/31 13:29:59
投稿者: rose11

hatenaさま
 
再び早々のご返信をありがとうございます。助かります。
そして、ご教示いただきました方法で上手くいきました!
また、そもそもの「データベースとはこういうもの」をご教示いただきまして、
「そうだったのか!!!それで今まであの点、この点が上手くいかなかったのか!」と色々合点がいきました。
大変勉強になりました。
解りやすいご親切なご回答を本当にありがとうございました!